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 負責主機間資料的路由和網...