關於Winsock:Winsock程式設計注意事項:連線設定和拆解
阿新 • • 發佈:2018-12-14
WSAAccept函式允許應用程式在決定是否接受傳入連線請求之前獲取呼叫者資訊,如呼叫者識別符號和服務質量。 這是通過回撥應用程式提供的條件函式來完成的。
如果服務提供商支援此功能,則可以在連線建立期間將WSAConnect函式中的引數指定的使用者到使用者資料和WSAAccept的條件函式傳送到對等方。
也可以(對於支援此協議的協議)在連線拆除時在端點之間交換使用者資料。 啟動拆卸的結束可以呼叫WSASendDisconnect函式來指示不再發送資料並啟動連線拆除序列。 對於某些協議,拆卸的一部分是從拆卸啟動器傳送斷開連線資料。 在收到遠端端已啟動拆除的通知(通常通過FD_CLOSE指示)後,可以呼叫WSARecvDisconnect函式來接收斷開連線資料(如果有)。
要說明如何使用斷開連線資料,請考慮以下方案。 客戶端/伺服器應用程式的客戶端一半負責終止套接字連線。 與終止一致,它提供(使用斷開連線資料)它與伺服器一起處理的事務總數。 伺服器依次響應它已與所有客戶端處理的累計事務總數。 呼叫和指示的順序可能如下:
Client side | Server side |
---|---|
(1)呼叫WSASendDisconnect以結束會話和供應事務總計。 | |
(2) 獲取FD_CLOSE,recv,返回值為零,或者從WSARecv返回WSAEDISCON錯誤,指示正在進行正常關閉。 | |
(3)呼叫WSARecvDisconnect以獲取客戶端的事務總數。 | |
(4)計算所有交易的累計總計。 | |
(5)呼叫WSASendDisconnect以傳輸總計。 | |
(6) 接收FD_CLOSE指示。 | (5a) 呼叫closesocket。 |
(7) 呼叫WSARecvDisconnect以接收和儲存累計的總事務總數。 | |
(8)呼叫closesocket。 |
注意,步驟(5a)必須遵循步驟(5),但是與步驟(6),(7)或(8)沒有時序關係。