listen - listen for connections on a socket
在一個套接字上傾聽連線
#include <sys/socket.h>
int listen(int s, int backlog);
在接收連線之前,首先要使用
socket(2)
建立一個套接字,然後呼叫
listen
使其能夠自動接收到來的連線並且為連線佇列指定一個長度限制.
之後就可以使用
accept(2)
接收連線.
listen
呼叫僅適用於
SOCK_STREAM
或者
SOCK_SEQPACKET
型別的套接字.
引數
backlog
指定未完成連線佇列的最大長度.如果一個連線請求到達時未完成連線
佇列已滿,那麼客戶端將接收到錯誤
ECONNREFUSED.
或者,如果下層協議支援重發,那麼這個連線請求將被忽略,這樣客戶端
在重試的時候就有成功的機會.
在TCP套接字中
backlog
的含義在Linux
2.2中已經改變.
它指定了已經完成連線正等待應用程式接收的套接字佇列的長度,而不是
未完成連線的數目.未完成連線套接字佇列的最大長度可以使用
tcp_max_syn_backlog sysctl設定
當開啟syncookies時不存在邏輯上的最大長度,此設定將被忽略.參見
tcp(7) 以獲取更多資訊.
函式執行成功時返回0.錯誤時返回-1,並置相應錯誤程式碼.
errno
- EBADF
- 引數 s
不是合法的描述符.
- ENOTSOCK
- 引數 s
不是一個套接字.
- EOPNOTSUPP
- 套接字型別不支援
listen 操作.
Single Unix, 4.4BSD, POSIX 1003.1g.
listen
函式呼叫最初出現於4.2BSD.
如果套接字型別是
AF_INET,
並且引數
backlog
大於常量
SOMAXCONN (Linux
2.0&2.2中是128),它將被自動截斷為
SOMAXCONN 的值.
有的BSD系統(以及一些BSD擴充套件)將backlog值限制為5.
accept(2),
connect(2),
socket(2)
byeyear <[email protected] >
2002.01.27
http://cmpp.linuxforum.net
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh