WSARecvDisconnect 函式 (winsock2.h)
WSARecvDisconnect 函式會終止套接字上的接收,如果套接字為連接導向,則會擷取中斷聯機數據。
語法
int WSAAPI WSARecvDisconnect(
[in] SOCKET s,
[out] LPWSABUF lpInboundDisconnectData
);
參數
[in] s
識別套接字的描述項。
[out] lpInboundDisconnectData
連入中斷聯機數據的指標。
傳回值
如果沒有發生錯誤, WSARecvDisconnect 會傳回零。 否則,會傳回SOCKET_ERROR的值,而且可以呼叫 WSAGetLastError 來擷取特定的錯誤碼。
錯誤碼 | 意義 |
---|---|
使用此函式之前,必須先進行成功的 WSAStartup 呼叫。 | |
網路子系統失敗。 | |
參數 lpInboundDisconnectData 所參考的緩衝區太小。 | |
指定的通訊協定系列不支援中斷連線數據。 請注意,不支援中斷連線數據的 TCP/IP 實作不需要傳回 WSAENOPROTOOPT 錯誤碼。 如需 TCP/IP 的 Microsoft 實作相關信息,請參閱一節。 | |
封鎖的 Windows Sockets 1.1 呼叫正在進行中,或者服務提供者仍在處理回呼函式。 | |
套接字未連線 (連線導向套接字) 。 | |
描述項不是套接字。 |
備註
WSARecvDisconnect 函式用於連線導向套接字,以停用接收,並從遠端合作物件擷取任何連入的中斷聯機數據。 這相當於關機 (SD_RECEIVE) ,不同之處在於 WSARecvDisconnect 也允許在支援的通訊協定中接收中斷連線數據 () 。
成功發出此函式之後,不允許套接字上的後續接收。 呼叫 WSARecvDisconnect 不會影響較低的通訊協定層。 針對 TCP 套接字,如果套接字上仍有數據排入佇列等候接收,或數據後續送達,則會重設連線,因為無法將數據傳遞給使用者。 針對UDP,會接受並排入佇列傳入的數據報。 在此情況下,不會產生ICMP錯誤封包。
注意 Windows 上的 TCP/IP 原生實作不支援中斷聯機數據。 只有 Windows Sockets 提供者在其 WSAPROTOCOL_INFO結構中有 XP1_DISCONNECT_DATA旗標,才支援中斷連線數據。 使用 WSAEnumProtocols 函式來取得所有已安裝提供者 的WSAPROTOCOL_INFO 結構。
WSARecvDisconnect 函式不會關閉套接字,而且在叫用 closesocket 之前,不會釋放附加至套接字的資源。
不論套接字上的SO_LINGER設定為何, WSARecvDisconnect 函式都不會封鎖。
應用程式不應該依賴在使用 WSARecvDisconnect 中斷連線之後重複使用套接字。 特別是,Windows Sockets 提供者不需要支援在這類套接字上使用 聯機 或 WSAConnect 。
注意 發出封鎖的 Winsock 呼叫,例如 WSARecvDisconnect 時,Winsock 可能需要等候網路事件,才能完成呼叫。 Winsock 會在這種情況中執行可警示的等候,而異步過程調用 (APC) 排程在同一個線程上,可能會中斷。 在 APC 內發出另一個封鎖 Winsock 呼叫,中斷相同線程上持續封鎖 Winsock 呼叫會導致未定義的行為,而且永遠不會由 Winsock 客戶端嘗試。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winsock2.h |
程式庫 | Ws2_32.lib |
Dll | Ws2_32.dll |