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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络IPC:套接字之建立连接

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络IPC:套接字之建立连接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果處理的是面向連接的網絡服務(SOCK_STREAM或SOCK_SEQPACKET),在開始交換數據以前,需要在請求服務的進程套接字(客戶端)和提供服務的進程套接字(服務器)之間建立一個連接。客戶端可以用connect建立一個連接。

#include <sys/socket.h> int connect(int sockfd, const struct sockaddr *addr, socklen_t len); 返回值:若成功則返回0,出錯則返回-1

在connect中所指定的地址是想與之通信的服務器地址。如果sockfd沒有綁定到一個地址,connect會給調用者綁定一個默認地址。

當連接一個服務器時,出于一些原因,連接可能失敗。要連接的機器必須開啟并且正在運行,服務器必須綁定到一個想與之連接的地址,并且在服務器的等待連接隊列中應有足夠的空間。因此,應用程序必須能夠處理connect返回的錯誤,這些錯誤可能由一些瞬時變化條件引起。

實例

程序清單16-2顯示了一種如何處理瞬時connect錯誤的方法。這在一個負載很重的服務器上很有可能發生。

#include "apue.h" #include <sys/socket.h>#define MAXSLEEP 128int connect_retry(int sockfd, const struct sockaddr *addr, socklen_t len) {int nsec;/** Try to connect with exponential backoff.*/for(nsec = 1; nsec <= MAXSLEEP; nsec <<= 1){if(connect(sockfd, addr, alen) == 0){/** Connection accepted. */return(0);}/** Delay before trying again.*/if(nsec <= MAXSEELP/2)sleep(nsec);}return(-1); }

這個函數使用了名為指數補償(exponential backoff)的算法。如果調用connect失敗,進程就休眠一小段時間后再嘗試,每循環一次增加每次嘗試的延遲,直到最大延遲為2分鐘。

如果套接字描述符處于非阻塞模式下,那么在連接不能馬上建立時,connect將會返回-1,并且將errno設為特殊的錯誤碼EINPROGRESS。應用程序可以使用poll或select來判斷文件描述符何時可寫。如果可寫,連接完成。

函數connect還可以用于無連接的網絡服務(SOCK_DGRAM)。這看起來有點矛盾,實際上卻是一個不錯的選擇。如果在SOCK_DGRAM套接字上調用connect,所有發送報文的目標地址設為connect調用中所指定的地址,這樣每次傳送報文時就不需要再提供地址。另外,僅能接收來自指定地址的報文。

服務器調用listen來宣告可以接受連接請求。

#include <sys/socket.h> int listen(int sockfd, int backlog); 返回值:若成功則返回0,出錯則返回-1

參數backlog提供了一個提示,用于表示該進程所要入隊的連接請求數量。其實際值由系統決定,但上限由<sys/socket.h>中SOMAXCONN指定。

一旦隊列滿,系統會拒絕多余連接請求,所以backlog的值應該基于服務器期望負載和接受連接請求與啟動服務的處理能力來選擇。

一旦服務器調用了listen,套接字就能接收連接請求。使用函數accept獲得連接請求并建立連接。

#include <sys/socket.h> int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict len); 返回值:若成功則返回文件(套接字)描述符,出錯則返回-1

函數accept所返回的文件描述符是套接字描述符,該描述符連接到調用connect的客戶端。這個新的套接字描述符和原始套接字(sockfd)具有相同的套接字類型和地址族。傳給accept的原始套接字沒有關聯到這個連接,而是繼續保持可用狀態并接受其他連接請求。

如果不關心客戶端標識,可以將參數addr和len設為NULL;否則,在調用accept之前,應將參數addr設為足夠大的緩沖區來存放地址,并且將len設為指向代表這個緩沖區大小的整數的指針。返回時,accept會在緩沖區填充客戶端的地址并且更新指針len所指向的整數為該地址的大小。

如果沒有連接請求等待處理,accept會阻塞直到一個請求到來。如果sockfd處于非阻塞模式,accept會返回-1并將errno設置為EAGAIN或EWOULDBLOCK。

如果服務器調用accept并且當前沒有連接請求,服務器會阻塞直到一個請求到來。另外,服務器可以使用poll或select來等待一個請求的到來。在這種情況下,一個帶等待處理的連接請求套接字會以可讀的方式出現。

實例

程序清單16-3顯示了一個服務器進程用以分配和初始化套接字的函數。

程序清單16-3 服務器初始化套接字端點?

#include "apue.h" #include <errno.h> #include <sys/socket.h>int initserver(int type, const struct sockaddr *addr, socklen_t alen, int qlen) {int fd;int err = 0;if((fd = socket(addr->sa_family, type, 0)) < 0)return(-1);if(bind(fd, addr, alen) < 0){err = errno;goto errout;}if(type == SOCK_STREAM || type == SOCK_SEQPACKET){if(listen(fd, qlen) < 0){err = errno;goto errout; }}return(fd);errout:close(fd);errno = err;return(-1); }

?

本篇博文內容摘自《UNIX環境高級編程》(第2版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/。

總結

以上是生活随笔為你收集整理的网络IPC:套接字之建立连接的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 免费av网站在线播放 | 偷拍自拍一区 | 人妻精品一区 | 亚洲欧美国产精品久久久久久久 | 国产精品无码久久久久久电影 | 国产97在线 | 亚洲 | 久久精品韩国 | 99riav视频 | 黄色录像片子 | 天天都色| 狠狠a | 老男人av| 欧美男人操女人 | 日韩三级电影网址 | 欧美aⅴ| 亚洲毛片网 | 免费在线黄网站 | 成年人免费看视频 | 欧美黑人多人双交 | 四色网址 | 麻豆网站在线观看 | 欧美一级片观看 | 精品动漫3d一区二区三区免费版 | 国产三级短视频 | 男人的亚洲天堂 | 日韩精品成人在线 | 免费看女生隐私 | 国产又粗又长又爽 | 在线不卡视频 | 免费黄色一区二区 | 一区二区三区免费在线视频 | 日韩视频一区在线观看 | 久久精品一| 日韩亚洲一区二区 | 国产丰满农村老妇女乱 | 成人狠狠干 | 午夜一级在线 | 特级丰满少妇一级aaaa爱毛片 | 久久久久精 | 日本大尺度做爰呻吟 | 香港黄色网 | 久草国产精品视频 | 东北老女人av | 领导揉我胸亲奶揉下面 | 在线污视频 | 美女三级网站 | 五月天色婷婷综合 | 一区二区视频免费 | 欧美一级性 | 亚洲国产成人av | 蜜桃av在线免费观看 | 欧美自拍偷拍第一页 | 日本不卡三区 | 99ri国产| 欧美三级午夜理伦三级老人 | 亚洲涩涩图 | 国产成人久久精品77777综合 | 青青草原综合久久大伊人精品 | 久久二区三区 | 天天干影院 | 韩国三级黄色 | 日韩一级欧美一级 | 美女bb视频 | 99热网址| 91成人在线观看喷潮动漫 | 99精品久久精品一区二区 | 国产黄色av | 久久婷婷五月综合色国产香蕉 | 一级黄色播放 | 日本黄色aaa | 播播网色播播 | 午夜激情欧美 | 欧美网站在线 | 金瓶风月在线 | 2023av在线| 中文字幕精品一区久久久久 | 无码国产伦一区二区三区视频 | jizz欧美性20| 久久99精品国产.久久久久 | 草av| 在线观看免费小视频 | 变态视屏| 免费黄色小说视频 | 非洲黑妞xxxxhd精品 | 日韩免费中文字幕 | 国产在线免费视频 | 黄色在线免费观看 | 欧洲人妻丰满av无码久久不卡 | 国产日韩专区 | 国产一级精品视频 | 国产精品免费av一区二区三区 | 欧美无砖砖区免费 | 国产高清免费在线观看 | 国产一级片子 | 蜜桃视频色 | 日韩激情小视频 | 91网址在线观看 | av色图在线 | 蜜乳av一区二区三区 |