B
B
Beej's Guide to Network Programming 正體中文版
Search…
B
B
Beej's Guide to Network Programming 正體中文版
簡介
聯絡譯者
簡體中文版
中文授權
原著資訊
進階資料
導讀
何謂 Socket
IP address、結構與資料轉換
從 IPv4 移植為 IPv6
System call 或 Bust
getaddrinfo()-準備開始!
socket()-取得 File Descriptor!
bind()- 我在哪個 port?
connect(),嘿!你好。
listen()-有人會呼叫我嗎?
accept()- 謝謝你 call 3490 port
send() 與 recv()- 寶貝,我們來聊天!
sendto() 與 recvfrom()- 來點 DGRAM
close() 與 shutdown()- 你消失吧!
getpeername()-你是誰?
gethostname()-我是誰?
Client-Server 基礎
進階技術
常見的問題
Man 使用手冊
參考資料
原著誌謝
譯者誌謝
Powered By
GitBook
listen()-有人會呼叫我嗎?
OK,是該改變步調的時候了。如果你不想要連線到一個遠端主機要怎麼做。
我說過,好玩就好,你想要等待進入的連線,並以某種方式處理它們。
這個過程有兩個步驟:你要先呼叫 listen(),接著呼叫 accept()(參考下一節)。
listen 呼叫相當簡單,不過需要一點說明:
1
int listen(int sockfd, int backlog);
Copied!
sockfd 是來自 socket() system call 的一般 socket file descriptor。backlog 是進入的佇列(incoming queue)中所允許的連線數目。這代表什麼意思呢?好的,進入的連線將會在這個佇列中排隊等待,直到你 accept() 它們(請見下節),而這限制了排隊的數量。多數的系統預設將這個數值限制為 20;你或許可以一開始就將它設定為 5 或 10。
再來,如同往常,listen() 會傳回 -1 並在錯誤時設定 errno。
好的,你可能會想像,我們需要在呼叫 listen() 以前呼叫 bind(),讓 server 可以在指定的 port 上執行。[你必須能告訴你的好朋友要連線到哪一個 port!]所以如果你正在 listen 進入的連線,你會執行的 system call 順序是:
1
getaddrinfo();
2
socket();
3
bind();
4
listen();
5
/* accept() 從這裡開始 */
Copied!
我只是留下範例程式的位置,因為它相當顯而易見。(在下面 accept() 章節中的程式碼會比較完整)。這整件事情真正需要技巧的部分是呼叫 accept()。
Previous
connect(),嘿!你好。
Next
accept()- 謝謝你 call 3490 port
Last modified
1yr ago
Copy link