UNIX網路程式設計 listen函式及其包裹函式介紹

2021-07-29 10:20:10 字數 1080 閱讀 5976

#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...