青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

Blog @ Blog

當華美的葉片落盡,生命的脈絡才歷歷可見。 -- 聶魯達

常用鏈接

統計

積分與排名

BBS

Blog

Web

最新評論

WSAAsyncSelect()函數詳解

WSAAsyncSelect()

簡述:
        通知套接口有請求事件發生.
       
        #include <winsock.h>

        int PASCAL FAR WSAAsyncSelect ( SOCKET s, HWND hWnd,
                        unsigned int wMsg,  long lEvent );
       
        s   標識一個需要事件通知的套接口的描述符.
        hWnd    標識一個在網絡事件發生時需要接收消息的窗口句柄.
        wMsg    在網絡事件發生時要接收的消息.
        lEvent  位屏蔽碼,用于指明應用程序感興趣的網絡事件集合.
       
注釋:
        本函數用來請求Windows Sockets DLL為窗口句柄發一條消息-無論它何時檢測到由lEvent參數指明的網絡事件.要發送的消息由wMsg參數標明.被通知的套接口由s標識.
        本函數自動將套接口設置為非阻塞模式.
        lEvent參數由下表中列出的值組成.
        值      意義
        FD_READ 欲接收讀準備好的通知.
        FD_WRITE    欲接收寫準備好的通知.
        FD_OOB  欲接收帶邊數據到達的通知.
        FD_ACCEPT   欲接收將要連接的通知.
        FD_CONNECT  欲接收已連接好的通知.
        FD_CLOSE    欲接收套接口關閉的通知.
       
        啟動一個WSAAsyncSelect()將使為同一個套接口啟動的所有先前的WSAAsyncSelect()作廢. 例如,要接收讀寫通知,應用程序必須同時用FD_READ和FD_WRITE調用WSAAsyncSelect(),如下:
        rc = WSAAsyncSelect(s, hWnd, wMsg, FD_READ|FD_WRITE);
        對不同的事件區分不同的消息是不可能的.下面的代碼將不會工作;第二個調用將會使第一次調用的作用失效,只有FD_WRITE會通過wMsg2消息通知到.
                        rc = WSAAsyncSelect(s, hWnd, wMsg1, FD_READ);
                        rc = WSAAsyncSelect(s, hWnd, wMsg2, FD_WRITE);

        如果要取消所有的通知,也就是指出Windows Sockets的實現不再在套接口上發送任何和網絡事件相關的消息,則lEvent應置為0.
                        rc = WSAAsyncSelect(s, hWnd, 0, 0);
       
        盡管在本例中,WSAAsyncSelect()立即使傳給該套接口的事件消息無效, 仍有可能有消息等在應用程序的消息隊列中.應用程序因此也必須仍準備好接收網絡消息-即使消息作廢.用closesocket()關閉一個套接口也同樣使WSAAsyncSelect()發送的消息作廢,但在closesocke()之前隊列中的消息仍然起作用.
        由于一個已調用accept()的套接口和用來接收它的偵聽套接口有同樣的屬性, 任何為偵聽套接口設置的的WSAAsyncSelect()事件也同樣對已接收的套接口起作用.例如, 如果一個偵聽的套接口有WSAAsyncSelect()事件FD_ACCEPT,FD_READ,FD_WRITE, 則任何在那個偵聽的套接口上接收的套接口將也有FD_ACCEPT,FD_READ,FD_WRITE事件,以及同樣的wMsg的值.若需要不同的wMsg及事件,應用程序應調用WSAAsyncSelect(),將已接收的套接口和想要發送的新消息作為參數傳遞.
        當某一套接口s上發生了一個已命名的網絡事件,應用程序窗口hWnd會接收到消息wMsg.wParam參數標識了網絡事件發生的套接口.lParam的低字指明了發生的網絡事件.lParam的高字則含有一個錯誤代碼.該錯誤代碼可以是winsock.h中定義的任何錯誤.
        錯誤代碼和事件可以通過WSAGETSELECTERRORH和WSAGETSELECTEVENT宏從lParam中取出.定義如下:
                  #define WSAGETSELECTERROR(lParam)            HIWORD(lParam)
                  #define WSAGETSELECTEVENT(lParam)            LOWORD(lParam)
注意:在accept()調用和為改變事件或wMsg的WSAAsyncSelect()調用中有一個計時窗口.應用程序如果需要給偵聽的和調用過accept()的套接口以不同的wMsg,它就應該在偵聽的套接口上請求FD_ACCEPT事件,然后在accept()調用后設置相應的事件.由于FD_ACCEPT從不發送給已連接的套接口,而FD_READ,FD_WRITE,FD_OOB及FD_CLOSE也從不發送給偵聽套接口,所以不會產生困難.
        使用以上的宏將最大限度的提高應用程序的可移植性.
        返回的可能網絡事件如下:
        值      意義
        FD_READ 套接口s準備讀
        FD_WRITE    套接口s準備寫
        FD_OOB  帶外數據準備好在套接口s上讀.
        FD_ACCEPT   套接口s準備接收新的將要到來的連接.
        FD_CONNECT  套接口s上的連接完成.
        FD_CLOSE    由套接口s標識的連接已關閉.

返回值:
        0           若應用程序感興趣的網絡事件的聲明成功.
        SOCKET_ERROR    否則.可通過調用WSAGetLastError()返回特定的錯誤代碼.

評價:
        盡管WSAAsyncSelect()可以以多個事件的組合來調用,應用程序窗口還是會為每個網絡事件接收一條消息.
        如同select()函數,WSAAsyncSelect()會被頻繁地調用來決定,何時一次數據轉移操作(send()或recv())可以啟動,并且可以立刻成功.盡管如此,健壯的應用程序必須做好這樣的準備, 即它可能接收到消息及啟動了一個會立即返回WSAEWOULDBLOCK的Windows Sockets API調用.例如,下列的事件序列是可能的:
        (i) 數據到達套接口s;Windows Sockets傳遞WSAAsyncSelect消息.
        (ii)    應用程序處理其它一些消息.
        (iii)   在處理過程中,應用程序啟動了ioctlsocket(s,FIONREAD...)并且注意到有數據準備好讀.
        (iv)    應用程序啟動recv(s,...)來讀數據.
        (v) 應用程序循環處理下一條消息,最終到達WSAAsyncSelect消息,表示數據已準備好讀.
        (vi)    應用程序啟動recv(s,...),但失敗并有錯誤WSAEWOULDBLOCK.
        其它的事件序列也是可能的.
        Windows Sockets DLL不會不斷地為某一特定的網絡事件向一個應用程序發送消息. 如果已成功地向應用程序窗口發送了一特定事件的通知,對該應用程序窗口將不再為該網絡事件發消息,直到應用程序調用函數隱含地重新通知該網絡事件.
        事件        重新通知函數
        FD_READ recv()或recvfrom()
        FD_WRITE    send()或sendto()
        FD_OOB  recv()
        FD_ACCEPT   accept()
        FD_CONNECT  無
        FD_CLOSE    無
        任何對重新通知函數的調用,即使失敗,也會達到為相關事件發重新通知消息的效果.
        對FD_READ,FD_OOB和FD_ACCEPT事件,消息傳遞是"水平觸發"(level-triggered)的.這意味著,若調用了重新通知函數并且相關的事件對該調用仍有效,WSAAsyncSelect()消息就將傳給應用程序.這為應用程序提供了事件驅動以及不必考慮在任一時刻到達的數據量的能力.考慮下列序列:
        (i) Windows Sockets DLL在套接口s上接收100字節的數據并傳遞一個FD_READ消息.
        (ii)    應用程序啟動recv(s,buffptr,50,0)接收50字節.
        (iii)   由于仍有數據未讀,Windows Sockets DLL發送另一個FD_READ消息.
       
        根據以上語義,應用程序不必在收到FD_READ消息時讀進所有可讀的數據-對應于每一FD_READ消息進行一次recv()調用是恰當的.如果應用程序為一個FD_READ消息而啟動了多個recv()調用,它將接收到多個FD_READ消息.這樣的應用程序可能希望在開始recv()調用( 通過不為FD_READ事件置位的WSAAsyncSelect()函數調用)之前關閉FD_READ消息.
        如果在應用程序初次調用WSAAsyncSelect()或當調用了重新通知函數時,有一個事件為真, 則會發送一個相應的消息.例如,若應用程序調用listen(),就會試圖進行連接,然后應用程序調用WSAAsyncSelect()聲明它需要為套接口接收FD_ACCEPT消息,Windows Sockets的實現就會立即傳遞一個FD_ACCEPT消息.
        FD_WRITE事件處理起來稍有不同.FD_WRITE消息是在套接口第一次用connect()連接或由accept()接受,并且在send()或sendto()以WSAWOULDBLOCK錯誤失敗后緩沖區空閑時發送的.因此,應用程序可以假設發送可能在第一次FD_WRITE消息時開始,并持續到一次返回WSAEWOULDBLOCK的發送. 在這樣的失敗后,應用程序將被通知,FD_WRITE消息的發送又將可能.
        FD_OOB事件只用在當套接口配置成獨立接收帶外數據時.如果一個套接口被配置成接收感興趣的帶外數據狀態,帶外數據將和普通數據等同視之,并且應用程序應該注冊它感興趣的方面,然后將接收FD_READ事件,而不是FD_OOB事件.應用程序可以設置或監控帶外數據處理的方法(通過使用setsockopt()或getsockopt()函數,及SO_OOBINLINE選項).
        在FD_CLOSE消息中的錯誤代碼指出套接口的關閉是正常的還是異常的.如果錯誤代碼是0,則關閉是正常的;若錯誤代碼是WSAECONNRESET,則套接口的虛套接口將被重置.這些只對SOCK_STREAM類型的套接口起作用.
        FD_CLOSE消息在相應套接口的虛電路關閉指令接收到時發送.在TCP術語中,這意味著FD_CLOSE在連接進入了FIN WAIT或CLOSE WAIT狀態時發送.這是遠端對發送方進行了shutdown()調用或closesocket()調用的結果.
        請注意你的應用程序將只會收到FD_CLOSE消息來指出虛電路的關閉.它不會收到FD_READ消息來表示該狀況.

錯誤代碼:
        WSANOTINITIALISED       在使用本API前必須進行一次成功的WSAStartup()調用.
        WSAENETDOWN     WINDOWS SOCKETS實現已檢測到網絡子系統故障.  
        WSAEINVAL           指出指定的參數之一是非法的.
        WSAEINPROGRESS      一個阻塞的Windows Sockets操作正在進行.
        附加的錯誤代碼可能在應用程序窗口接收到消息時被置.這些代碼可以用WSAGETSELECTERROR宏從lParam中取出.對應于每個網絡事件的可能錯誤代碼為:
        事件:FD_CONNECT
        WSAEADDRINUSE       給定的地址已被使用.
        WSAEADDRNOTAVAIL        指定的地址在本地機器不能使用.
        WSAEAFNOSUPPORT     指定族的地址不能和本套接口同時使用.
        WSAECONNREFUSED     連接的嘗試被拒絕.
        WSAEDESTADDRREQ     需要一個目的地址.
        WSAEFAULT           namelen參數不正確.
        WSAEINVAL           套接口已經約束到一個地址.
        WSAEISCONN          套接口已經連接.
        WSAEMFILE           沒有可用的文件描述符.
        WSAENETUNREACH      此時網絡不能從該主機訪問.
        WSAENOBUFS          無可用的緩沖區空間.套接口不能連接.
        WSAENOTCONN     套接口沒有連接.
        WSAENOTSOCK     該描述符是文件,不是套接口.
        WSAETIMEDOUT        試圖連接超時,未建立連接.
        事件:FD_CLOSE
        WSAENETDOWN     WINDOWS SOCKETS實現已檢測到網絡子系統故障.  
        WSAECONNRESET       連接由遠端重建.
        WSAECONNABORTED     由于超時或其它失敗放棄連接.
        事件:FD_READ
        事件:FD_WRITE
        事件:FD_OOB
        事件:FD_ACCEPT
        WSAENETDOWN     WINDOWS SOCKETS實現已檢測到網絡子系統故障.  

關于Windows Sockets提供者的說明:
        Windows Sockets的提供者應確保消息可以成功地傳給應用程序.如果PostMessag()操作失敗,Windows Sockets的實現必須重發該消息-只要窗口存在.
        Windows Sockets提供者應使用WSAMAKESELECTREPLY宏來構造消息中的lParam參數.
        當套接口關閉時,Windows Sockets提供者應清除所有保留下來要發送給應用程序窗口的消息.然而應用程序必須準備好接收,放棄任何在closesocket()之前可能已經發送的消息.

posted on 2008-03-20 13:46 isabc 閱讀(3147) 評論(0)  編輯 收藏 引用 所屬分類: VC Function

廣告信息(免費廣告聯系)

中文版MSDN:
歡迎體驗

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一级黄色av| 激情欧美一区二区| 在线中文字幕一区| 亚洲精品影院| 国产精品高潮粉嫩av| 亚洲欧美日韩一区二区| 亚洲综合另类| 精品999久久久| 亚洲激情在线视频| 久久精品亚洲一区| 亚洲欧洲一区二区三区| 日韩一级在线观看| 国产亚洲欧美一区二区| 亚洲第一页在线| 国产精品二区在线| 久久影院亚洲| 欧美片第1页综合| 久久国产精品久久久久久| 久久久久久久精| 一区二区三区毛片| 久久精品二区亚洲w码| 日韩午夜中文字幕| 亚洲欧美日韩爽爽影院| 亚洲欧美文学| 最新中文字幕一区二区三区| 一区二区三区四区五区在线| 韩国v欧美v日本v亚洲v| 亚洲精品一区二区三区99| 国产亚洲成av人在线观看导航 | 午夜宅男久久久| 久久午夜av| 午夜精品一区二区三区在线播放| 久久精品国产第一区二区三区最新章节 | 午夜久久久久久| 日韩一区二区福利| 久久精品欧美日韩精品| 亚洲永久网站| 欧美激情精品| 美日韩精品视频| 国产区欧美区日韩区| 亚洲日本无吗高清不卡| 一区二区亚洲精品| 亚洲欧美一区二区视频| 亚洲天堂av在线免费观看| 美女免费视频一区| 蜜桃久久av一区| 国产主播一区二区三区四区| 亚洲婷婷综合色高清在线| 91久久中文| 免费视频最近日韩| 久久一区二区三区四区| 国产欧美日韩亚洲精品| 亚洲午夜av| 亚洲一区综合| 欧美图区在线视频| 一本色道久久综合一区| 一级日韩一区在线观看| 欧美国产综合一区二区| 亚洲高清在线观看| 亚洲人成在线播放| 欧美电影免费观看高清| 亚洲电影免费观看高清完整版在线观看 | 欧美成在线观看| 亚洲第一福利社区| 91久久亚洲| 欧美伦理a级免费电影| 亚洲人成在线观看一区二区| 亚洲美女在线一区| 欧美日韩中文字幕在线视频| 一区二区三区精品| 亚洲男人av电影| 国产欧美精品一区二区色综合| 亚洲性视频网站| 久久av在线| 国产真实乱偷精品视频免| 久久久久久久久久久久久女国产乱| 久久久久一区二区| 亚洲国产精品传媒在线观看 | 免费日韩av电影| 亚洲一级免费视频| 国产伦理精品不卡| 久久久欧美精品| 美女国产精品| 亚洲免费精彩视频| 国产精品爱啪在线线免费观看| 亚洲一区二区三区影院| 久久夜色撩人精品| 日韩一二三区视频| 国产精品区一区二区三| 久久精品视频在线| 亚洲开发第一视频在线播放| 欧美一区二区三区日韩| 在线观看视频一区二区欧美日韩| 欧美成人免费网| 午夜精品一区二区在线观看| 欧美成人精品在线观看| 亚洲午夜精品福利| 国模私拍视频一区| 欧美日韩中文字幕在线| 久久久久国色av免费观看性色| 亚洲精品美女在线观看播放| 欧美一区二区在线| 亚洲免费av电影| 韩国女主播一区二区三区| 女人香蕉久久**毛片精品| 亚洲一区二区成人在线观看| 欧美成人一区二区| 久久不射电影网| 日韩亚洲不卡在线| 在线精品福利| 国产精品中文在线| 欧美日本在线观看| 久久亚洲私人国产精品va媚药| 亚洲无线视频| 亚洲美女av在线播放| 免费成人毛片| 久久久亚洲国产美女国产盗摄| 一区二区三区毛片| 亚洲精品欧美一区二区三区| 韩国一区电影| 国产欧美大片| 国产精品免费一区二区三区在线观看| 久久麻豆一区二区| 欧美一区激情| 亚洲在线成人精品| 在线视频你懂得一区二区三区| 欧美激情一区二区三区高清视频| 久久精品在线观看| 久久爱www久久做| 欧美亚洲自偷自偷| 亚洲综合成人婷婷小说| 亚洲一区在线看| 亚洲小视频在线| 亚洲视频第一页| 亚洲视频www| 亚洲免费视频网站| 亚洲女性裸体视频| 亚洲欧美视频在线观看视频| 一区二区三区www| 中文欧美在线视频| 亚洲女同性videos| 欧美一区日韩一区| 久久国产一区二区三区| 久久精品国产69国产精品亚洲| 久久av一区二区三区亚洲| 久久国产加勒比精品无码| 久久久久久高潮国产精品视| 久久精品视频免费播放| 麻豆乱码国产一区二区三区| 玖玖综合伊人| 欧美成人自拍视频| 亚洲精品日本| 中日韩视频在线观看| 一片黄亚洲嫩模| 午夜精品福利视频| 久久人人看视频| 欧美激情欧美狂野欧美精品| 欧美激情精品久久久六区热门 | 国产精品免费看片| 国产日韩亚洲欧美综合| 黄色av一区| 亚洲精品免费在线| 亚洲制服欧美中文字幕中文字幕| 欧美在线视频a| 免费在线看一区| 亚洲人精品午夜在线观看| 日韩一级精品视频在线观看| 亚洲综合99| 久久久欧美精品| 欧美日韩一区二区三区| 国产一区91| 9l国产精品久久久久麻豆| 欧美亚洲日本网站| 欧美成人激情在线| 中日韩视频在线观看| 久久免费视频在线观看| 欧美美女bbbb| 国产在线欧美日韩| 这里只有精品视频在线| 久久久精品性| 最新中文字幕亚洲| 久久国产婷婷国产香蕉| 欧美日韩高清在线一区| 黄网动漫久久久| 亚洲一区欧美一区| 欧美成人性网| 午夜视频久久久| 欧美日韩亚洲综合| 在线观看亚洲视频啊啊啊啊| 亚洲欧美亚洲| 亚洲人成网在线播放| 久久国内精品自在自线400部| 欧美日韩mp4| 亚洲国产老妈| 久久久久久久久久久成人| 亚洲小视频在线观看| 欧美精品三级| 亚洲日本精品国产第一区| 久久久91精品国产| 亚洲一区二区三区四区五区黄|