Linux Socket TCP協議的7個關鍵函式

2021-07-24 00:21:39 字數 1222 閱讀 2511

socket(套接字)是網路程序之間進行通訊的工具,它的主要函式是以下7個:

int socket(int domain, int type, int protocol); //建立socket,有點像fopen()函式,返回值是乙個int型描述字。這個描述字會被後面的函式用到。

domain代表協議族,常用的有af_inet(ipv4)、af_inet6(ipv6)。這些引數在linux/socket.h中都有定義。

type代表套接字型別,比如sock_stream(tcp流)。

protocal代表用的協議,前面2個引數定下來之後這個引數就定了,用「0」就可以。

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); //bind。這個函式是服務端用來將特定的位址賦(bind)給socket的。

sockfd代表第乙個函式socket返回的描述字,後面的addr和addrlen就是把特定位址賦和位址長度的資訊給該socket。

int listen(int sockfd, int backlog); //服務端監聽函式。建立了socket就要監聽該socket有沒有連線請求。函式的第乙個引數sockfd代表的就是建立的socket,第二個引數表示可以在socket等待的最大數量,是乙個容量的概念。

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); //這個函式就是客戶端傳送的連線請求。3個引數都在上面的函式出現過,意思也是一樣的,只不過第乙個引數代表的是客戶端的socket資訊。

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); //客戶端傳送了connect請求,那麼服務端自然就要接受請求了。這就是accept函式。第乙個引數是服務端socket描述字,後面2個引數代表客戶端位址和位址長度。

ssize_t read(int fd, void *buf, size_t count);

ssize_t write(int fd, const void *buf, size_t count);

通訊連線建立好之後就可以用i/o進行資訊傳輸了。read()、write()函式就是其中之一。

int close(int fd); //顧名思義close函式用來關閉通訊的。

協程巢狀協程

import asyncio import functools 第三層協程 async def test1 print 我是test1 await asyncio.sleep 1 print test1已經睡了1秒 await asyncio.sleep 3 print test1又睡了3秒 ret...

9 協程 協程理論

本節的主題是基於單執行緒來實現併發,即只用乙個主線程 很明顯可利用的cpu只有乙個 情況下實現併發,為此我們需要先回顧下併發的本質 切換 儲存狀態 ps 在介紹程序理論時,提及程序的三種執行狀態,而執行緒才是執行單位,所以也可以將上圖理解為執行緒的三種狀態cpu正在執行乙個任務,會在兩種情況下切走去...

python協程與非同步協程

在前面幾個部落格中我們一一對應解決了消費者消費的速度跟不上生產者,浪費我們大量的時間去等待的問題,在這裡,針對業務邏輯比較耗時間的問題,我們還有除了多程序之外更優的解決方式,那就是協程和非同步協程。在引入這個概念之前我們先看 看這個圖 從這個我們可以看出來,假如來了9個任務,即使我們開了多程序,在業...