5.5. listen() ---如果有“人”,請叫我?
是換換內容得時候了。假如你不希望與遠程的一個地址相連,或者說, 僅僅是將它踢開,那你就需要等待接入請求並且用各種方法處理它們。處理過程分兩步:首先,監聽--listen(),然後,你接受--accept()
函數原型:
int listen(intsockfd, int backlog);
sockfd 是調用socket() 返回的套接字文件描述符。backlog 是在進入隊列中允許的連接數目。什麼意思呢? 進入的連接是在隊列中一直等待直到你接受 (accept() 請看下面的文章)連接。它們的數目限制於隊列的允許。 大多數系統的允許數目是20,你也可以設置為5到10。
和別的函數一樣,在發生錯誤的時候返回-1,並設置全局錯誤變量 errno。
你可能想象到了,在你調用 listen() 前你或者要調用bind() 或者讓內核隨便選擇一個端口。如果你想偵聽進入的連接,那麼系統調用的順序可能是這樣的:
getaddrinfo();
socket();
bind();
listen();
/* accept() goeshere */
因為它相當的明了,我將在這裡不給出例子了。(在 accept() 那一章的代碼將更加完全。)真正麻煩的部分在 accept()。
摘自 xiaobin_HLJ80的專欄