unix網絡編程

TCP的連接

(1)服務器,調用socket, bind和listen,被動打開

(2)客服,調用connect,主動打開




1.爲了執行網絡I/O,一個進程必須做的第一件事就是調用socket函數,指定期望的通信協議類型,客戶端和服務器端都需要socket()函數(該套接字從socket()開始爲CLOSED狀態)

#include <sys/socket.h>
int socket(int family, int type, int protocol);
成功時返回爲非負描述符,出錯返回-1

2.TCP用戶調用connect函數來建立與TCP服務器的連接,套接字轉移爲SYN_SEND狀態,如果成功,則轉移爲ESTABLELISHED狀態。若失敗則該套接字不可再用,必須關閉,不能對這樣的套接字再次調用connect函數。

#include <sys/soket.h>
int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);

sockfd是socket函數返回的套接字描述符,第二,第三個參數分別是一個指向套接字地址結構的指針和該結構的大小


3.bind函數把一個本地協議地址賦予一個套接字,如ip地址+TCP端口號的組合,如果一個TCP客戶或服務器未曾調用bind捆綁一個端口,當調用connect或listen時,內核就要爲相應的套接字選擇一個臨時端口。進程可以把一個特定的IP地址捆綁到它的套接字上,不過這個IP地址必須屬於其所在主機的網絡接口之一。

#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);

4.listen函數僅由TCP服務器調用(1)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章