listen()

listen()

創建一個套接口並監聽申請的連線.

#include <sys/socket.h>

int listen( int sockfd, int backlog);

sockfd:用於標識一個已捆綁未連線套接口的描述字。

backlog:等待連線佇列的最大長度。

基本介紹

  • 中文名:listen函式
  • 外文名:listen()
  • 簡述:創建一個套接口並監聽申請的連線
  • 注釋:為了接受連線
  • 兼容性:後備日誌當前被限制為5
注釋,兼容性,返回值,錯誤代碼,

注釋

為了接受連線,先用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().

相關詞條

熱門詞條

聯絡我們