日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux网络编程二:基础socket, bind, listen, accept, connect

發布時間:2025/6/15 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux网络编程二:基础socket, bind, listen, accept, connect 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

linux網絡編程二:基礎socket, bind, listen, accept, connect


1. 創建socket


#include <sys/types.h> ? ?
#include <sys/socket.h>?
?
int socket(int domain, int type, int protocol); ?
?
(1)0domain參數為底層協議族:PF_INET(用于IPv4),PF_INET6(用于IPv6);對于UNIX本地域協議族為PF_UNIX。


(2)type參數指定服務類型:SOCK_STREAM(流服務,TCP協議),SOCK_UGRAM(數據報,UDP協議)。自linux2.6.17起,type參數可以接受上述服務與下面兩個重要的標志相與的值:SOCK_NONBLOCK和SOCK_CLOEXEC。它們分別表示新創建的socket設為非陰塞,以及在fork調用創建子進程時在子進程中關閉該socket。


(3)protocol參數是在前兩個參數構成的協議集合下,再選擇一個具體的協議。不過這個值通常都是唯一的(前兩個值已經完全決定了它的值)。幾乎在所有情況下都設置為0, 表示使用默認協議。調用成功返回一個socket文件描述符,失敗返回-1,并設置errno。


2. 命名socket


#include <sys/types.h> ??
#include <sys/socket.h> ? ?
int bind(int socket, const struct sockaddr* my_addr, socklen_t addrlen);?
?
bind將my_addr所指的socket地址分配給未命名的sockfd文件描述符,addrlen參數指出該socket地址的長度。
調用成功返回0, 失敗返回-1,并設置errno。




3. 監聽socket


#include <sys/socket.h> ??
int listen(int sockfd, int backlog); ?


創建一個監聽隊列以存放待處理的客戶連接。sockfd參數指定被 監聽的socket。backlog參數提示內核監聽隊列的最大長度。如果監聽隊列的長度超過backlog,服務器將不受理新的客戶連接,客戶端也將收到ECONNREFUSED錯誤信息。在內核版本2.2之前,backlog是指所有處于半連接狀態(SYN_RCVD)和完全連接狀態(ESTABLISHED)的socket上限。但在內核版本2.2以后, 它只表示處于完全連接狀態的socket上限,處于半連接狀態的socket上限則由/proc/sys/net/ipv4/tcp_max_syn_backlog內核參數定義。
backlog參數的典型值為5。調用成功時返為0, 失敗時為-1, 并設置errno。


4. 接受連接,從listen監聽隊列中接受一個連接




#include <sys/types.h> ??
#include <sys/socket.h> ? ?
int accept(int sockfd, struct sockaddr* addr, socklen_t *addrlen); ?


sockfd參數是執行過listen調用的監聽socket。addr參數用來獲取被接受連接的遠端socket地址,該地址的長度由addrlen參數指出。調用成功時返回一個新的連接socket,該socket唯一標識了被接受的這個連接,服務器可通過讀寫該socket來與客戶端通信; 失敗時返回-1,并設置errno。


5. ?客戶端發起連接


#include <sys/types.h> ??
#include <sys/socket.h> ??
int connect(int sockfd, const struct sockaddr* serv_addr, socklen_t addrlen); ?


sockfd參數由socket系統調用返回一個socket。
serv_addr參數是服務器監聽的socket地址。addrlen參數指定serv_addr的長度。

?

調用成功返回0, 一旦成功建立連接,sockfd就唯一標識了這個連接,客戶端就可以通過讀寫sockfd來與服務器通信。 失敗返回-1, 并設置errno。常見兩種 errno是 ECONNREFUSED(目標端口不存在,連接被拒絕) 和 ETIMEDOUT(連接超時)。

?

?

#include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <string.h> int main(int argc, char **argv) { if (argc <= 2) { fprintf(stderr, "Usage: %s ip port\n", basename(argv[0])); return 1; } const char *ip = argv[1]; int port = atoi(argv[2]); struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_family = AF_INET; address.sin_port = htons(port); inet_pton(AF_INET, ip, &address.sin_addr); int sock = socket(PF_INET, SOCK_STREAM, 0); assert(sock >= 0); int ret = bind(sock, (struct sockaddr*)&address, sizeof(address)); assert(ret != -1); ret = listen(sock, 5); assert(ret != -1); struct sockaddr_in client; socklen_t client_addrlength = sizeof(client); int connfd = accept(sock, (struct sockaddr*)&client, &client_addrlength); if(connfd < 0) { fprintf(stderr, "errno is: %s\n", strerror(errno)); } else { char remote[INET_ADDRSTRLEN]; fprintf(stderr, "connected with ip:%s and port:%d\n", inet_ntop(AF_INET,&client.sin_addr,remote, INET_ADDRSTRLEN), ntohs(client.sin_port)); close(connfd); } close(sock); return 0; }

?

?

?

?

?

總結

以上是生活随笔為你收集整理的linux网络编程二:基础socket, bind, listen, accept, connect的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩三级中文 | 亚洲你懂得 | 国产精品丝袜黑色高跟鞋 | 91成人免费在线观看 | 蜜桃av噜噜一区二区三区网址 | 百合sm惩罚室羞辱调教 | 尤物毛片 | 波多野结衣在线观看一区二区三区 | 亚洲国产爱 | xxxx日本少妇| 欧美成人国产va精品日本一级 | 粉嫩av.com| 美女被啪羞羞粉色视频 | 乱xxxxx普通话对白 | 中文字幕精品一区 | 麻豆视频软件 | 日穴| 亚洲熟妇av一区二区三区漫画 | 1024亚洲| 久久免费黄色网址 | 午夜精品久久久久久久 | 亚洲香蕉| 中文字幕有码在线播放 | 91最新入口 | 欧美日韩国产麻豆 | 免费中文字幕在线观看 | 巨乳xxx| 逼特逼视频在线观看 | 好吊妞视频这里只有精品 | 国产精品熟女视频 | 91小宝寻花一区二区三区 | 久久久久久久999 | 国产精选在线观看 | 波多野结衣一级 | 女女同性高清片免费看 | 婷婷五月花| 五月天开心激情 | 91日韩视频| 在线看的免费网站 | 99久久精品一区二区成人 | 自拍视频啪 | 中文字幕精品久久久久人妻红杏1 | 欧美日韩综合一区二区 | melody在线高清免费观看 | 久久人人爽人人人人片 | 黄色aa网站 | 色噜噜狠狠成人中文 | 麻豆传媒视频入口 | 欧美又粗又大aaa片 老熟妇仑乱视频一区二区 亚洲妇女体内精汇编 | 男人天堂视频在线 | 日本视频网 | 熟女肥臀白浆大屁股一区二区 | 精品视频在线观看免费 | 六月婷婷网| 嫩色av | 成人小说亚洲一区二区三区 | 伊人精品在线 | 黄色av网站在线观看 | 久久爱99 | 欧美黑人xxxⅹ高潮交 | 国产精品久久久久久久av福利 | 台湾chinesehdxxxx少妇 | 美女污软件 | 91免费视频网 | 亚洲区一区二区 | 黄瓜视频在线免费看 | 成人网在线播放 | 国产精品77| 午夜爱爱免费视频 | 日韩专区视频 | 国产婷婷 | 国产人人射 | 成人黄色国产 | 一区二区三区www污污污网站 | 国产精品69久久久久孕妇欧美 | 日本在线加勒比 | 黑人无套内谢中国美女 | 91久久久久| 精品人妻无码一区二区三 | 亚洲精品久久视频 | 欧美成人三级在线视频 | 日韩黄色一区 | 日韩一页 | 国产成人无码a区在线观看视频 | 第一页国产 | 狠狠爱综合| 一本加勒比波多野结衣 | 国产a视频精品免费观看 | 国产精品视频一区二区三区不卡 | 成人久久网 | 深夜国产在线 | 91福利视频网 | 亚洲一久久| 精品人伦一区二区三区蜜桃免费 | 国产精品日韩一区二区 | 久久久久久人妻一区二区三区 | 国产精品88 | 最新中文字幕在线视频 | 国产一二三区在线 |