listen()

創建一個套接口並監聽申請的連線. #include int listen( int sockfd, int backlog); sockfd:用於標識一個已捆綁未連線套接口的描述字。 backlog:等待連線佇列的最大長度。

注釋

為了接受連線,先用socket()創建一個套接口的描述字,然後用listen()創建套接口並為申請進入的連線建立一個後備日誌,然後便可用accept()接受連線了。listen()僅適用於支持連線的套接口,如SOCK_STREAM類型的。套接口s處於一種“變動”模式,申請進入的連線請求被確認,並排隊等待被接受。這個函式特別適用於同時有多個連線請求的伺服器;如果當一個連線請求到來時,佇列已滿,那么客戶將收到一個WSAECONNREFUSED錯誤。

當沒有可用的描述字時,listen()函式仍試圖正常地工作。它仍接受請求直至佇列變空。當有可用描述字時,後續的一次listen()或accept()調用會將佇列按照當前或最近的“後備日誌”重新填充,如有可能的話,將恢復監聽申請進入的連線請求。

兼容性

後備日誌當前被(默認地)限制為5。如同4.3 BSD Unix中的一樣,小於1或大於5的數都會被捨入最近的有效值。

返回值

如無錯誤發生,listen()返回0。否則的話,返回-1,應用程式可通過WSAGetLastError()獲取相應錯誤代碼。

錯誤代碼

WSANOTINITIALISED:在使用此API之前應首先成功地調用WSAStartup()。

WSAENETDOWN:套接口實現檢測到網路子系統失效。

WSAEADDRINUSE:試圖用listen()去監聽一個正在使用中的地址。

WSAEINPROGRESS:一個阻塞的套接口調用正在運行中。

WSAEINVAL:該套接口未用bind()進行捆綁,或已被連線。

WSAEISCONN:套接口已被連線。

WSAEMFILE:無可用檔案描述字。

WSAENOBUFS:無可用緩衝區空間。

WSAENOTSOCK:描述字不是一個套接口。

WSAEOPNOTSUPP:該套接口不正常listen()調用。

參見:

accept(), connect(), socket().

相關詞條

相關搜尋

熱門詞條

聯絡我們