監聽套接字 連線套接字的區別

2021-09-12 20:23:00 字數 945 閱讀 3416

摘要:對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。

accept函式等待並接受客戶請求:

#include

int accept(int sockfd, struct sockaddr* addr, socklen_t* len)

返回:非負描述字——成功, -1——失敗

accept缺省會阻塞程序,直到有乙個客戶連線建立後返回,它返回的是乙個新可用的套接字,這個套接字是連線套接字。此時我們需要區分兩種套接字,一種套接字正如accept的引數sockfd,它是監聽套接字,在呼叫listen函式之後,乙個套接字會從主動連線的套接字變身為乙個監聽套接字;而accept返回是乙個連線套接字,它代表著乙個網路已經存在的點點連線。自然要問的是:為什麼要有兩種套接字?原因很簡單,如果使用乙個描述字的話,那麼它的功能太多,使得使用很不直觀,同時在核心確實產生了乙個這樣的新的描述字。

引數sockfd 

引數sockfd就是上面解釋中的監聽套接字,這個套接字用來監聽乙個埠,當有乙個客戶與伺服器連線時,它使用這個乙個埠號,而此時這個埠號正與這個套接字關聯。當然客戶不知道套接字這些細節,它只知道乙個位址和乙個埠號。

引數addr 

這是乙個結果引數,它用來接受乙個返回值,這返回值指定客戶端的位址,當然這個位址是通過某個位址結構來描述的,使用者應該知道這乙個什麼樣的位址結構。如果對客戶的位址不感興趣,那麼可以把這個值設定為null。

引數len 

如同大家所認為的,它也是結果的引數,用來接受上述addr的結構的大小的,它指明addr結構所占有的位元組個數。同樣的,它也可以被設定為null。 

如果accept成功返回,則伺服器與客戶已經正確建立連線了,此時伺服器通過accept返回的套接字來完成與客戶的通訊。

監聽套接字 連線套接字

摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...

accept中的監聽套接字和已連線套接字

int accept int sockfd,struct sockaddr cliaddr,socklen t addrlen 該函式用於從已完成連線的佇列隊頭返回下乙個已完成連線。其中sockfd為監聽套接字 cliaddr和addrlen由核心填入客戶端的協議位址 返回值為已連線套接字 乙個服務...

TCP如何區分監聽套接字和已連線套接字???

2010 10 09 10 39 868人閱讀收藏 tcp伺服器 wildcard freebsd socket 2010 2.10 tcp埠號與併發伺服器 併發伺服器中主伺服器迴圈通過派生乙個子程序來處理每個新的連線。如果乙個子程序繼續使用伺服器眾所周知的埠來服務乙個長時間的請求,那將發生什麼?讓...