TCP IP程式設計之accept函式詳解

2021-07-14 16:17:05 字數 1404 閱讀 3960

accept函式由tcp伺服器呼叫,用於從已完成連線佇列返回下乙個已完成連線。如果已完成連線隊列為空,那麼程序被投入睡眠(假定套接字默為預設的阻塞方式)

函式原型:

accept(2)                  linux programmer's manual                 accept(2)

name

accept, accept4 - accept a connection on a socket

synopsis

#include /* see notes */

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

引數說明:

sockfd是由socket函式返回的套接字描述符,引數addr和addrlen用來返回已連線的對端程序(客戶端)的協議位址。如果我們對客戶端的協議位址不感興趣,可以把arrd和addrlen均置為空指標

返回值:

返回:若成功則為非負描述符,若出錯則為-1

如果accept成功,那麼其返回值是由核心自動生成的乙個全新描述符,代表與客戶端的tcp連線。乙個伺服器通常僅僅建立乙個監聽套接字,它在該伺服器生命週期內一直存在。核心為每個由伺服器程序接受的客戶端連線建立乙個已連線套接字。當伺服器完成對某個給定的客戶端的伺服器時,相應的已連線套接字就被關閉。

ipv4的tcp偽**如下:

int sockfd = socket(af_inet, sock_stream, 0); //tcp

// 呼叫bind()

// 呼叫listen()

//等待連線

struct sockaddr_in cliaddr;

socklen_t len = sizeof(cliaddr);

int connfd = accept(sockfd, (sockaddr *)&cliaddr, &len);

if (-1 == connfd)

//解析客戶端位址

char buff[inet_addrstrlen + 1] = ;

inet_ntop(af_inet, &cliaddr.sin_addr, buff, inet_addrstrlen);

uint16_t port = ntohs(cliaddr.sin_port);

printf("connection from %s, port %d\n", buff, port);

參考:《unix網路程式設計》·卷1

多執行緒程式設計之pthread create函式應用

多執行緒程式設計之pthread create函式應用 pthread create函式 函式簡介 pthread create是unix環境建立執行緒函式 標頭檔案 include 函式宣告 int pthread create pthread t restrict tidp,const pthr...

Winsocket程式設計之TCP IP體系結構

一 tcp ip 體系結構與特點 1 tcp ip體系結構 tcp ip協議實際上就是在物理網上的一組完整的網路協議。其中tcp是提供傳輸層服務,而ip則是提供網路層服務。tcp ip包括以下協議 結構如圖1.1 圖1.1 ip 網間協議 internet protocol 負責主機間資料的路由和網...

Winsocket程式設計之TCP IP體系結構

一 tcp ip 體系結構與特點 1 tcp ip體系結構 tcp ip協議實際上就是在物理網上的一組完整的網路協議。其中tcp是提供傳輸層服務,而ip則是提供網路層服務。tcp ip包括以下協議 結構如圖1.1 圖1.1 ip 網間協議 internet protocol 負責主機間資料的路由和網...