WSARecvDisconnect 函式 (winsock2.h)

WSARecvDisconnect 函式會終止套接字上的接收,如果套接字為連接導向,則會擷取中斷聯機數據。

語法

int WSAAPI WSARecvDisconnect(
  [in]  SOCKET   s,
  [out] LPWSABUF lpInboundDisconnectData
);

參數

[in] s

識別套接字的描述項。

[out] lpInboundDisconnectData

連入中斷聯機數據的指標。

傳回值

如果沒有發生錯誤, WSARecvDisconnect 會傳回零。 否則,會傳回SOCKET_ERROR的值,而且可以呼叫 WSAGetLastError 來擷取特定的錯誤碼。

錯誤碼 意義
WSANOTINITIALISED
使用此函式之前,必須先進行成功的 WSAStartup 呼叫。
WSAENETDOWN
網路子系統失敗。
WSAEFAULT
參數 lpInboundDisconnectData 所參考的緩衝區太小。
WSAENOPROTOOPT
指定的通訊協定系列不支援中斷連線數據。 請注意,不支援中斷連線數據的 TCP/IP 實作不需要傳回 WSAENOPROTOOPT 錯誤碼。 如需 TCP/IP 的 Microsoft 實作相關信息,請參閱一節。
WSAEINPROGRESS
封鎖的 Windows Sockets 1.1 呼叫正在進行中,或者服務提供者仍在處理回呼函式。
WSAENOTCONN
套接字未連線 (連線導向套接字) 。
WSAENOTSOCK
描述項不是套接字。

備註

WSARecvDisconnect 函式用於連線導向套接字,以停用接收,並從遠端合作物件擷取任何連入的中斷聯機數據。 這相當於關機 (SD_RECEIVE) ,不同之處在於 WSARecvDisconnect 也允許在支援的通訊協定中接收中斷連線數據 () 。

成功發出此函式之後,不允許套接字上的後續接收。 呼叫 WSARecvDisconnect 不會影響較低的通訊協定層。 針對 TCP 套接字,如果套接字上仍有數據排入佇列等候接收,或數據後續送達,則會重設連線,因為無法將數據傳遞給使用者。 針對UDP,會接受並排入佇列傳入的數據報。 在此情況下,不會產生ICMP錯誤封包。

注意 Windows 上的 TCP/IP 原生實作不支援中斷聯機數據。 只有 Windows Sockets 提供者在其 WSAPROTOCOL_INFO結構中有 XP1_DISCONNECT_DATA旗標,才支援中斷連線數據。 使用 WSAEnumProtocols 函式來取得所有已安裝提供者 的WSAPROTOCOL_INFO 結構。
 
若要成功接收連入的中斷連線數據,應用程式必須使用其他機制來判斷線路是否已關閉。 例如,應用程式必須收到FD_CLOSE通知、接收零傳回值,或從 recv/ 接收 WSAEDISCONWSAECONNRESET 錯誤碼。

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

另請參閱

WSAConnect

WSAEnumProtocols

WSAGetLastError

WSAPROTOCOL_INFO

WSARecv

Winsock 函式

Winsock 參考

closesocket

connect

socket