#include
int listen(int sockfd,int backlog);
返回:若成功則為0,若出錯則為-1
目前listen
函式僅為tcp
伺服器呼叫,主要完成兩個任務:
1. 將socket
函式建立的還未建立連線的主動套接字轉換為被動(監聽)套接字,使核心接受指向該套接字的連線。
2. 使用第二個引數規定了核心為相應套接字排隊的最大連線個數。
tips:歷史上總是將socket
函式建立的套接字被預設為乙個主動套接字,即該套接字為將呼叫connect
函式發起連線的客戶套接字。而listen
函式導致該套接字從closed
狀態轉換為listen
狀態。
backlog
設為5,但已無法滿足現在伺服器的需求了,所以需要指定乙個較大的backlog
才能滿足繁忙的需求。一種方法是使用乙個常值,可是每次增長都需要重新編譯,比較麻煩;另一種方法是設定預設值,然後允許通過命令列或環境變數覆蓋預設值:
#include
#include
void listen(int fd,int backlog)
這樣就可以通過設定環境變數listenq
來動態配置backlog
的大小。
tips:backlog
為0不代表就不會有客戶連線到你的機器。如果不想讓客戶連線,請直接關閉該套接字。
- github:answerywj
- blog:
- email:[email protected]
- weibo:@answer不是答案
- csdn:answer不是答案的專欄
本作品採用知識共享署名-相同方式共享 4.0 國際許可協議進行許可。
網路程式設計socket之listen函式
listen函式使用主動連線套介面變為被連線套介面,使得乙個程序可以接受其它程序的請求,從而成為乙個伺服器程序。在tcp伺服器程式設計中listen函式把程序變為乙個伺服器,並指定相應的套接字變為被動連線。listen函式在一般在呼叫bind之後 呼叫accept之前呼叫,它的函式原型是 inclu...
網路程式設計之listen與bind
今天根據 unix 網路程式設計 卷1 第四章的4.4和4.5的習題要求 嘗試把服務端的listen和bind分別去掉,看看會發生什麼 首先把listen去掉,然後我發現我竟然這麼做了,開始真是嚇死,螢幕一直滾,不斷地刷屏啊,因為我讓服務端列印來自客戶端的套接字 ip位址和埠資訊,一直刷的是 cli...
網路程式設計socket之listen函式
摘要 listen函式使用主動連線套介面變為被連線套介面,使得乙個程序可以接受其它程序的請求,從而成為乙個伺服器程序。在tcp伺服器程式設計中listen函式把程序變為乙個伺服器,並指定相應的套接字變為被動連線。listen函式在一般在呼叫bind之後 呼叫accept之前呼叫,它的函式原型是 in...