socket和accept返回的套接字不同之處。

2021-08-26 08:17:45 字數 650 閱讀 2029

1、socket返回的套接字用於listen、bind或者connect,服務端呼叫listen、bind之後再用於生產accept_fd,客戶端則connect後直接可以讀寫和服務端通訊。

2、accept呼叫socket產生的套接字並返回xi套接新的,用於和客戶端通訊讀寫,若一台伺服器的乙個埠連線了三個客戶端,則有乙個sock_fd和三個accept_fd,共四個套接字描述符。

3、accept返回成功後,可以直接關閉socket產生的套接字sock_fd,不影響後面accept_fd的通訊。

4、客戶端關閉連線後,伺服器需要關閉所有套接字,包括socket_fd和accept_fd。

舉例:乙個客戶端和乙個服務端連線

雙方socket產生各自的c_sock_fd和s_sock_fd;

s_sock_fd進行bind和listen後,accept準備接受客戶端的連線請求;

c_sock_fd呼叫connect請求連線服務端;

服務端接到請求產生accept_fd,屆時accept_fd和c_sock_fd兩個套接字可以通訊,而s_sock_fd則可以關閉;

客戶端關閉close(c_sock_fd)後,服務端關閉所有未關閉的fd,通訊徹底斷開。

(服務端的socket產生的套接字只是用來監聽的,不能直接用於傳送接收資料。)

socket通訊 accept函式

先給出乙個典型的tcp ip通訊示意圖。問題一 socket結構體物件究竟是怎樣定義的?我們知道,在使用socket程式設計之前,需要呼叫socket函式建立乙個socket物件,該函式返回該socket物件的描述符。函式原型 intsocket intdomain,inttype,intproto...

socket的accept函式解析

今天與同學爭執乙個話題 由於socket的accept函式在有客戶端連線的時候產生了新的socket用於服務該客戶端,那麼,這個新的socket到底有沒有占用乙個新的埠?討論完後,才發現,自己雖然熟悉socket的程式設計套路,但是卻並不是那麼清楚socket的原理,今天就趁這個機會,把有關sock...

由socket的accept說開去

討論完後,才發現,自己雖然熟悉socket的程式設計套路,但是卻並不是那麼清楚socket的原理,今天就趁這個機會,把有關socket程式設計的幾個疑問給搞清楚吧。先給出乙個典型的tcp ip通訊示意圖。問題一 socket結構體物件究竟是怎樣定義的?我們知道,在使用socket程式設計之前,需要呼...