linux網路程式設計基礎知識

2021-09-26 23:32:35 字數 1781 閱讀 2442

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

引數:sock是socket返回的套接字描述符,第二個和第三個引數是伺服器的套接字位址結構的指標和該結構的大小。

作用:tcp客戶端通過connect函式建立與tcp伺服器的連線,呼叫connect函式將激發三次握手過程。

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

bind函式把乙個本地協議位址(套接字位址結構)賦予乙個套接字,對於伺服器端,限定了該套接字只接受那些目地的為指定的套接字位址的客戶端的連線,對於客戶端,則是指定源ip位址和源埠號。

為什麼一般情況下伺服器端會呼叫bind()函式,客戶端不呼叫bind()函式呢?

因為如果不呼叫bind函式,套接字的ip位址和埠號就會由核心來選擇,對於客戶端來說是很正常的,但是伺服器端需要繫結它的眾所周知埠號以及它的源ip位址

int listen(int sockfd,int backlog);

listen函式把乙個未連線的套接字轉換成乙個被動套接字,指示核心應接受指向該套接字的連線請求,呼叫listen將導致套接字從closed狀態轉換到listen狀態。

未完成連線佇列:這些套接字已經完成三次握手中第一次握手,也就是客戶端的syn已經到達,伺服器正在等待完成三次握手過程,這些套接字處於syn_rcvd狀態

已完成連線佇列:這些套接字已經完成三次握手過程,處於established狀態。當呼叫accept時,會從已完成連線佇列中選取隊頭的套接字返回給程序,如果隊列為空,程序將進入睡眠,直至該佇列中被放入一項才被喚醒。

第二個引數指定了這兩個佇列的總和的最大值

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

從已完成連線佇列中返回下乙個已完成連線,如果隊列為空,那麼程序就會進入睡眠直至該佇列中被放入一項才被喚醒。

第二個引數和第三個引數用來返回已連線客戶端的套接字位址結構和長度。

如果accept成功,將返回乙個已連線套接字描述符。

已連線套接字描述符和監聽套接字描述法的區別:

監聽套接字描述符:由socket建立,隨後用於bind和listen的第乙個引數的描述符,乙個伺服器通常僅僅建立乙個監聽套接字描述符,在伺服器的生命期一直存在。

已連線套接字描述符:由accept返回的描述符為已連線套接字描述符,核心為每乙個已連線(已經完成了三次握手過程)客戶端建立乙個已連線套接字描述符。

可以。可以看到bind函式的作用是把乙個套接字位址結構賦予乙個套接字,繫結了套接字的ip位址和埠號。

#include int bind(int socket, const struct sockaddr *address,socklen_t address_len);
sockaddr引數是乙個套接字位址結構。

sockaddr結構如下:

sa_family_t    sin_family    /*協議*/

in_port_t sin_port /*埠*/

struct in_addr sin_addr /*ip*/

unsigned char sin_zero[8] /*sizeof(struct sockaddr)*/

可以看到linux是以協議、ip、埠來繫結ip和埠的,所以不同協議相同的ip和埠也是可以繫結成功的。

Linux網路程式設計 基礎知識(1)

linux網路程式設計 基礎知識 1 1.linux網路知識介紹 1.1 客戶端程式和服務端程式 網路程式和普通的程式有乙個最大的區別是網路程式是由兩個部分組成的 客戶端和伺服器端.網路程式是先有伺服器程式啟動,等待客戶端的程式執行並建立連線.一般的來說是服務端的程式 在乙個埠上監聽,直到有乙個客戶...

Linux網路程式設計1 基礎知識

從應用的角度出發,協議可理解為 規則 是資料傳輸和資料的解釋的規則。簡單講就是網路各層傳輸資料時規定如何傳輸。傳輸層常見協議有tcp udp協議。應用層常見的協議有http協議,ftp協議。網路層常見協議有ip協議 icmp協議 igmp協議。網路介面層常見協議有arp協議 rarp協議。linux...

linux網路基礎知識

linux下的網路配置 通訊的三要素是 ip位址,子網掩碼,路由。ip和netmask是必須有的,有了這兩個條件,可以實現本地網路通訊。如果有ip,netmask,route,就可以實現跨網段通訊 ip位址 internet protocol address 是一種在internet上的給主機編址的...