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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows下设置socket的connect超时

發(fā)布時(shí)間:2025/3/20 windows 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows下设置socket的connect超时 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

變相的實(shí)現(xiàn)connect的超時(shí),我要講的就是這個(gè)方法,原理上是這樣的:
1.建立socket
2.將該socket設(shè)置為非阻塞模式
3.調(diào)用connect()
4.使用select()檢查該socket描述符是否可寫(注意,是可寫)
5.根據(jù)select()返回的結(jié)果判斷connect()結(jié)果
6.將socket設(shè)置為阻塞模式(如果你的程序不需要用阻塞模式的,這步就省了,不過一般情況下都是用阻塞模式的,這樣也容易管理)

//?widonws:?默認(rèn)設(shè)置socket?TCP?client?connect為阻塞模式 void?TcpConnect(char*?strIP,?UINT?nPort) {struct?sockaddr_in?serverAddress;SOCKET?hSocket?=?NULL;hSocket?=?socket(AF_INET,?SOCK_STREAM,?IPPROTO_TCP);if(?hSocket==INVALID_SOCKET){return;}memset(&serverAddress,?0,?sizeof(serverAddress));?????serverAddress.sin_family??????=?AF_INET;serverAddress.sin_addr.s_addr?=?inet_addr(strIP);???serverAddress.sin_port????????=?htons((short)nPort);??????int?iTimeOut?=?3000;setsockopt(hSocket,SOL_SOCKET,SO_RCVTIMEO,(char*)&iTimeOut,sizeof(iTimeOut));setsockopt(hSocket,SOL_SOCKET,SO_SNDTIMEO,(char*)&iTimeOut,sizeof(iTimeOut));????if(?SOCKET_ERROR==connect(hSocket,?(sockaddr*)&serverAddress,?sizeof(serverAddress))?){????????closesocket(hSocket);DWORD?gle?=?WSAGetLastError();return;}char?buff[]?=?"hello";int?sl=::send(hSocket,(char*)buff,?sizeof(buff),?0);if(?sl<0?){closesocket(hSocket);return?;}closesocket(hSocket); }//?widonws:?設(shè)置socket?TCP?client?connect非阻塞模式 void?SockSelect(char*?strIP,?UINT?nPort) {SOCKET/*int*/?sockfd?=?socket(AF_INET,?SOCK_STREAM,?IPPROTO_TCP);if(sockfd?<?0)?{return;}struct?sockaddr_in?serv_addr;//以服務(wù)器地址填充結(jié)構(gòu)serv_addrserv_addr.sin_family?=?AF_INET;serv_addr.sin_addr.s_addr?=?inet_addr(strIP);serv_addr.sin_port?=?htons(nPort);int?error?=?-1;int?len?=?sizeof(int);timeval?tm;fd_set?set;unsigned?long?ul?=?1;ioctlsocket(sockfd,?FIONBIO,?&ul);?//設(shè)置為非阻塞模式bool?ret?=?false;if(?connect(sockfd,?(struct?sockaddr?*)&serv_addr,?sizeof(serv_addr))?==?-1){tm.tv_sec??=?3;tm.tv_usec?=?0;FD_ZERO(&set);FD_SET(sockfd,?&set);if(?select(sockfd+1,?NULL,?&set,?NULL,?&tm)?>?0){getsockopt(sockfd,?SOL_SOCKET,?SO_ERROR,?(char?*)&error,?/*(socklen_t?*)*/&len);if(error?==?0)?ret?=?true;else?ret?=?false;}?else?ret?=?false;}else?ret?=?true;ul?=?0;ioctlsocket(sockfd,?FIONBIO,?&ul);?//設(shè)置為阻塞模式if(!ret)?{closesocket(?sockfd?);fprintf(stderr?,?"Cannot?Connect?the?server!/n");return;}fprintf(?stderr?,?"Connected!/n");char?buff[]?=?"hello";int?sl=::send(sockfd,(char*)buff,?sizeof(buff),?0);closesocket(?sockfd?); }


轉(zhuǎn)載于:https://blog.51cto.com/webrobot/1669545

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的windows下设置socket的connect超时的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。