基本TCP套接字操作

2022-06-05 19:36:09 字數 1881 閱讀 9944

建立乙個套接字,指定通訊協議型別

// 成功:返回檔案描述符	失敗:返回-1,設定errno

把乙個本地協議位址賦予乙個套接字。

// 成功:返回0	失敗:返回-1,設定errno(常見:eacces、eaddrinuse)

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

struct sockaddr_in ;

/* internet address. */

struct in_addr ;

做兩件事:

把乙個未連線的主動套接字轉換成被動套接字,指示核心接收指向該套接字的連線請求,closed狀態-->listen狀態

backlog規定已完成連線佇列的最大連線個數

// 成功:返回0	失敗:返回-1,設定errno

int listen(int sockfd, int backlog);

核心為任何乙個給定的監聽套接字維護兩個佇列:

linux 2.2 以後,backlog 表示已完成連線佇列的 socket 上限。實際測試中,佇列最大長度為backlog + 1

測試**及資料:listen()函式backlog引數測試

tcp客戶端使用,用於建立與tcp伺服器的連線

// 成功:返回0	失敗:返回-1,設定errno

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

有tcp伺服器呼叫,從已完成連線佇列隊頭返回乙個描述符。若隊列為空,程序睡眠(預設阻塞方式)

// 成功:返回非負描述符	失敗:返回-1,設定errno

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

若對返回客戶端協議位址不感興趣,可把 addr、addrlen 均值為空指標。

關閉套接字,該套接字不能再被呼叫程序使用。併發伺服器中,close呼叫實際是相應套接字引用計數減1

// 成功:返回0	失敗:返回-1,設定errno

int close(int sockfd);

當close關閉套接字時,tcp將嘗試傳送已排隊等待傳送到對端的任何資料,傳送完畢後的是正常的tcp連線終止序列(四次握手)。

基本TCP套接字程式設計

基本tcp客戶 伺服器程式的套接字函式 返回 若成功則為非負描述符,若則為 1 其中family引數指明協議族,為某個常值。該引數也往往稱為協議域。family 說明af inet ipv4協議 af inet6 ipv6協議 af local unix域協議 af route 路由套接字 af k...

基本TCP套接字程式設計

經過最近一段時間的系統學習,對於傳輸協議中tcp協議的套接字程式設計以及11中狀態轉化有了一定的認識,現在做出 以下總結 上圖是幾乎所有教科書上關於tcp客戶端 伺服器通訊過程中api函式的彙總。首先看伺服器端 1 服務端以被動連線的方式參與通訊,因此首先呼叫socket int family,in...

基本TCP套接字程式設計

tcp客戶與伺服器程序之間典型事件時間表 socket函式 includeint socket int family,int type,int protocol family引數執行協議族,該引數也往往被稱為協議域。是以下某個常值 type引數指明套接字型別,是以下某個常值 protocol引數應設...