国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

socket和accept返回的套接字(fd)有什么區別

alexnevsky / 4282人閱讀

摘要:定義返回出錯成功套接口描述字套接字我在哪個端口功能給套接口分配一個本地協議地址。服務端的產生的套接字只是用來監聽的,不能直接用于發送接收數據。

記錄unix網絡編程的復習之路 簡單回顧下socket連接過程

socket() --得到fd!

 功能:指定了協議族(IPv4、IPv6或unix)和套接口類型(字節流、數據報或原始套接口)。但并沒有指定本地協議地址或遠程協議地址。
 定義:int socket(int family, int type, int protocol);
 返回:出錯:-1
        成功:套接口描述字 (socket file descriptor)(套接字)sockfd

bind() --我在哪個端口?

 功能:給套接口分配一個本地協議地址。
 定義:int bind(int sockfd, const struct sockaddr *my_addr, int addrlen);

connect() --Hello!

 功能:建立與TCP服務器的連接
 定義:int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);

listen() --有人給我打電話嗎?

 功能:將未連接主動套接口的轉換為被動套接口,指示內核接受對該套接口的連接請求。
 定義:int listen(int sockfd, int backlog);
 參數:
     - sockfd調用socket函數返回的文件描述符(套接字).
     - 未完成連接隊列和已完成連接隊列的上限.
        - 未完成連接隊列 : 服務端還未完成三次握手全部過程的一個隊列.
        - 已完成連接隊列 : 服務端已經完成三次握手全部過程的一個隊列, 等待accept函數從這個隊列中返回下一個(返回其實是取出, 該套接字不在已完成隊列中了)套接字.

accept() --"Thank you for calling port 3490."

 功能:accept函數從listen的已完成連接隊列中返回下一個已完成連接, 也就是對端的套接字, 一個新的套接字. 當已完成連接隊列的下一個完成 
      連接是空, 那么accept函數將被阻塞.
 定義:int accept(int sockfd, struct sockaddr *cliaddr, int* addrlen);
 返回:調用成功時返回: 1. cliaddr: 客戶進程的協議地址和地址大小 2. 新套接口描述字

send() 和 recv() --Talk to me, baby!

close() --滾開!


socket()和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,通訊徹底斷開。
ps:服務端的socket產生的套接字只是用來監聽的,不能直接用于發送接收數據。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44030.html

相關文章

  • nodejs cluster模塊分析

    摘要:而在進程執行把進程添加到調度器中時添加了一個回調函數,回調函數了一個帶的消息,并且為,就是這個消息觸發了發送的函數的執行。 最近做了點nodejs項目,對nodejs的cluster怎么利用多進程處理請求產生了疑問,于是著手進行了研究,之后發現這其中竟大有文章!一切還是先從遙遠的TCP說起吧。。。 TCP與Socket 說到TCP,相信很多人都相當了解了,大學已經教過,但是又相信有很多...

    KnewOne 評論0 收藏0

發表評論

0條評論

alexnevsky

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<