以WSA開頭的API,結合了Windows平台特性

來源:互聯網
上載者:User

標籤:nbsp   call   erro   ipv6   控制代碼   結構   socket   sar   提供者   

Windows Sockets為了支援Windows訊息驅動機制,使應用程式開發人員能夠方便地處理網路通訊,對網路事件採用了基於訊息的非同步存取策略;

1、WSAAsyncSelect

  該函數為指定的通訊端(socket)請求基於Windows訊息的網路事件通知,並自動將該通訊端設定為非阻塞模式;

  int WSAAsyncSelect (

    SOCKET s,

    HWND hWnd,         

    unsigned int wMsg, 

    long lEvent        

  );

    s:標識請求網路事件通知的通訊端;

    hWnd:標識一個網路事件發生時接收訊息的視窗的控制代碼;

    wMsg:指定網路事件發生時視窗將接收到的訊息;

    lEvent:指定應用程式感興趣的網路事件,包括:

      FD_READ  --有關是否可讀的通知,以便讀取資料

      FD_WRITE  --有關是否可寫的通知,以便發送資料

      FD_OOB  --是否帶外(OOB)資料抵達的通知

      FD_ACCEPT  --與進入串連有關的通知

      FD_CONNECT  --串連操作已完成的通知

      FD_CLOSE  --與通訊端關閉有關的通知

      FD_QOS  --通訊端“服務品質”發生更改的通知

      FD_GROUP_QOS  --通訊端組“服務品質”發生更改的通知

      FD_ROUTING_INTERFACE_CHANGE  --在指定的方向上,與路由介面發生變化有關的通知

      FD_ADDRESS_LIST_CHANGE  --針對通訊端的協議家族,本地地址清單發生變化的通知

2、WSAEnumProtocols

  該函數可獲得系統中安裝的網路通訊協定的相關資訊,該函數不能重複調用,傳入的緩衝區必須足夠大以便能存放所有元素;

  int WSAEnumProtocols (

      LPINT lpiProtocols,                  

      LPWSAPROTOCOL_INFO lpProtocolBuffer, 

      ILPDWORD lpdwBufferLength            

  );

      lpiProtocols:一個以NULL結尾的協議標識號數組;如果為NULL,則該函數返回所有可用協議的資訊,否則只返回數組中列出的協議資訊;

      lpProtocolBuffer:作為傳回值使用,一個用WSAPROTOCOL_INFO結構體填充的緩衝區;WSAPROTOCOL_INFO結構體用來存放或得到一個指定協議的完整資訊;

      lpdwBufferLength:在輸入時,指定傳遞給該函數的參數lpProtocolBuffer緩衝區的長度;在輸出時,存有擷取所有請求資訊需傳遞給該函數的最小緩衝區的長度;

3、WSAStartup

  該函數將初始化進程使用的socket庫;

  int WSAStartup (

      WORD wVersionRequested, 

      LPWSADATA lpWSAData 

  );

      wVersionRequested:可以使用的socket庫的版本;高位位元組指定庫的副版本,低位位元組為主要版本;

      lpWSAData:返回可用庫的資訊,是一個指向WSADATA資料結構類型變數的指標;

4、WSACleanup

  該函數將終止程式對socket庫的使用;

  int WSACleanup();

5、WSASocket

  該函數將建立通訊端;

  SOCKET WSASocket (

      int af,                            

      int type,                          

      int protocol,                      

      LPWSAPROTOCOL_INFO lpProtocolInfo, 

      GROUP g,                           

      DWORD dwFlags                      

  );

      af:指定地址族,AF_UNIX/AF_LOCAL/AF_FILE--本地通訊;AF_INET--網路通訊IPv4(主用);AF_INET6--網路通訊IPv6(首碼AF替換成PF效果一樣);

      type:指定socket類型,SOCK_STREAM--流式通訊端,SOCK_DGRAM--資料報式通訊端;

      protocol:推薦為0;

      lpProtocolInfo:一個指向WSAPROTOCOL_INFO結構體的指標,該結構體定義了所建立的通訊端的特性;可以為NULL;

      g:保留參數;

      dwFlags:指定通訊端屬性的描述;如果設為WSA_FLAG_OVERLAPPED,將建立一個重疊通訊端;

6、WSARecv---recv函數的擴充版本

  int WSARecv (

      SOCKET s,                                               

      LPWSABUF lpBuffers,                                    

      DWORD dwBufferCount,                                   

      LPDWORD lpNumberOfBytesRecvd,                          

      LPDWORD lpFlags,                                        

      LPWSAOVERLAPPED lpOverlapped,                          

      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE 

  );

7、WSASend---send函數的擴充版本

  int WSASend (

      SOCKET s,                                              

      LPWSABUF lpBuffers,                                    

      DWORD dwBufferCount,                                   

      LPDWORD lpNumberOfBytesSent,                           

      DWORD dwFlags,                                         

      LPWSAOVERLAPPED lpOverlapped,                           

      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE 

  );

8、WSARecvFrom---recvfrom函數的擴充版本

  該函數接收資料報類型的資料,並儲存資料發送方的地址;通過該函數的第2個參數可知,在調用該函數接收資料時,可同時定義多個WSABUF結構體變數來接收資料,並通過該函數的第3個參數指定WSABUF結構體的數量;

  int WSARecvFrom (

      SOCKET s,                                               

      LPWSABUF lpBuffers,                                    

      DWORD dwBufferCount,                                   

      LPDWORD lpNumberOfBytesRecvd,                          

      LPDWORD lpFlags,                                        

      struct sockaddr FAR * lpFrom,                          

      LPINT lpFromlen,                                       

      LPWSAOVERLAPPED lpOverlapped,                          

      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE 

  );

      s:標識通訊端;

      lpBuffers:指向WSABUF結構體數組的指標,該結構體的定義為:

        typedef struct __WSABUF{

          u_long len;     //緩衝區的長度

          char FAR *buf;  //指向緩衝區的指標

        }WSABUF, FAR * LPWSABUF;

      dwBufferCount:lpBuffers數組中WSABUF結構體的數目;

      lpNumberOfBytesRecvd:指向本次調用所接收的位元組數的指標;

      lpFlags:取值包括:

        MSG_PEEK  --瀏覽到來的資料,這些資料被複製到緩衝區,但並不從輸入隊列中移除;僅對非重疊通訊端有效;

        MSG_OOB  --處理帶外(OOB)資料

        MSG_PARTIAL  --僅用於面向訊息的通訊端;作為輸出參數時,表明資料是發送方傳送的訊息的一部分,訊息的剩餘部分將在隨後的接收操作中被傳送,如果隨後的某個接收操作沒有此標誌,就表明這是發送方發送的訊息的尾部;作為輸入參數時,表明接收操作已完成,即使只是一條訊息的部分資料已被服務提供者所接收;

      lpFrom:一個可選的指標,指向重疊操作完成後存放源地址的緩衝區;

      lpFromlen:一個指向lpFrom指定的緩衝區大小的指標,僅當指定了lpFrom參數時才須使用該參數;

      lpOverlapped:一個指向WSAOVERLAPPED結構體的指標,非重疊通訊端則忽略此參數;

      lpCompletionROUTINE:一個指向接收操作完成時調用的完成常式的指標,該常式實際上就是如下所示的一個回呼函數,非重疊通訊端則忽略此參數;

        void CALLBACK CompletionROUTINE(

          IN DWORD dwError,

          IN DWORD cbTransferred,

          IN LPWSAOVERLAPPED lpOverlapped,

          IN DWORD dwFlags

        );

9、WSASendTo---sendto函數的擴充版本

  int WSASendTo (

      SOCKET s,                                              

      LPWSABUF lpBuffers,                                    

      DWORD dwBufferCount,                                    

      LPDWORD lpNumberOfBytesSent,                           

      DWORD dwFlags,                                         

      const struct sockaddr FAR * lpTo,                      

      int iToLen,                                             

      LPWSAOVERLAPPED lpOverlapped,                          

      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE 

  );

      s:標識一個通訊端

      lpBuffers:一個指向WSABUF結構體的指標;

      dwBufferCount:lpBuffers數組中WSABUF結構體的數目;

      lpNumberOfBytesSent:一個指向本次調用所發送的位元組數的指標;

      dwFlags:指示影響操作行為的標誌位,設為0;

      lpTo:可選指標,指向目標通訊端的地址;

      iToLen:lpTo中地址的長度;

      lpOverlapped:一個指向WSAOVERLAPPED結構體的指標,非重疊通訊端忽略該參數;

      lpCompletionROUTINE:一個指向接收操作完成時調用的完成常式的指標,非重疊通訊端忽略該參數;

 

以WSA開頭的API,結合了Windows平台特性

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.