摘要:定義返回出錯成功套接口描述字套接字我在哪個端口功能給套接口分配一個本地協議地址。服務端的產生的套接字只是用來監聽的,不能直接用于發送接收數據。
記錄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產生各自的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項目,對nodejs的cluster怎么利用多進程處理請求產生了疑問,于是著手進行了研究,之后發現這其中竟大有文章!一切還是先從遙遠的TCP說起吧。。。 TCP與Socket 說到TCP,相信很多人都相當了解了,大學已經教過,但是又相信有很多...
閱讀 632·2021-11-22 15:32
閱讀 2720·2021-11-19 09:40
閱讀 2313·2021-11-17 09:33
閱讀 1263·2021-11-15 11:36
閱讀 1864·2021-10-11 10:59
閱讀 1475·2019-08-29 16:41
閱讀 1780·2019-08-29 13:45
閱讀 2150·2019-08-26 13:36