在connect中使用select实现超时处理(WINDOWS版)
与中文yahoo翻了底朝天,也没找到如何设置socket的连接超时的满意方法,问此问题的兄弟已有一大堆,这里偶就讲一下win下如何设置socket的connect超时。设置connect的超时很简单,上也有人提到过使用select,但却没有一个令人满意与完整的答案。偶所讲的也正是select函数,此函数集成在winsock1.1中,简单点讲,"作用使那些想避免在套接字调用过程中被锁定的应用程序,采取一种有序的方式,同时对多个套接字进行管理"(《Windows网络编程技术》原话)。使用方法与解释请见《Windows网络编程技术》。
在使用此函数前,需先将socket设置为非锁定模式,这样,在connect时,才会立马跳过,同时,通常也会产生一个WSAEWOULDBLOCK错误,这个错误没关系。再执行select则是真正的超时。
WSADATA wsd;
SOCKET cClient;
int ret;
struct sockaddr_in server;
hostent *host=NULL;
if(WSAStartup(MAKEWORD(2,0),&wsd)){return 0;}
cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(cClient==INVALID_SOCKET){return 0;}
//set Recv and Send time out
int TimeOut=6000; //设置发送超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
TimeOut=6000;//设置接收超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)return 0;
//连接
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr .s_addr = inet_addr((LPCSTR)pSmtp);
if(server.sin_addr.s_addr == INADDR_NONE){return 0;}
connect(cClient,(const struct sockaddr *)&server,sizeof(server));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
::closesocket(cClient);
return 0;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR){
::closesocket (cClient);
return 0;
}
不错啊,支持
楼主辛苦了,看了这么多帖子,不敢不回帖了,不然后果太严重了!坚决回帖!
[img]http://tv.bbs.cctv.com/attachments/month_0803/20080329_fe2f8221db29ec0f43ec8lrkHh9X1ZXY.gif[/img]
[img]http://bbs.jcwcn.com/images/default/sigline.gif[/img]
[color=#009999]能冲刷一切的除了眼泪,就是时间.[/color][url=http://www.ttwowgold.com/][color=#009999]wow gold[/color][/url][color=#009999]以时间来推移感情,时间越长,冲突越淡,仿佛不断稀释的茶.[/color][url=http://www.ttwowgold.com/][color=#009999]world of warcraft gold[/color][/url][color=#009999]如果朋友让你生气,那说明你仍然在意他的友情.[/color][url=http://www.jjwowgold.com/][color=#009999]wow gold[/color][/url][color=#009999]当幻想和现实面对时,总是很痛苦的.要么你被痛苦击倒,要么你把痛苦踩在脚下[/color][url=http://www.jjwowgold.com/][color=#009999]world of warcraft gold[/color][/url]
品你的作品像一杯泛着点点绿色的茶
发展楼主,顶贴楼主才是硬道理[img]http://ilove.msnshell.com/ddimg/artlit/20080416/181515367.jpg[/img] [img]http://ilove.msnshell.com/ddimg/artlit/20080411/153600262.jpg[/img]
[url=http://www.sh-cf.net/]厂房出售[/url]-仓库出租,工业园区招商引资
[url=http://www.955919.cn/]上海物流公司[/url]-专业的上海物流服务网络中心
[url=http://www.shbcbj.cn/]上海搬家公司[/url]-具有一定规模的专业搬场运输公司[url=http://www.thel.cn/]电磁流量计[/url]-各种导电液体的流量检测
[url=http://www.tianruhang.org/]注册上海代表[/url]-关于上海外资企业注册信息
不经意
[img]http://www.cuteseo.cn/images/1.gif[/img]走过路过看贴拿米走人~~~
[color=wheat]我的链接:[/color][url=http://service.cuteseo.cn/service_tgfa.htm][color=wheat]网站推广[/color][/url]
[url=http://service.cuteseo.cn/service_wzyh.htm][color=wheat]网站优化方案[/color][/url]
[url=http://service.cuteseo.cn/service_zxfw.htm][color=wheat]大型网站咨询[/color][/url]
[url=http://service.cuteseo.cn/service_xxwz.htm][color=wheat]企业网站优化[/color][/url]
[url=http://type.cuteseo.cn/type1252.htm][color=wheat]搜索引擎[/color][/url]
最后支持
[color=black]085◎如果幸福是浮云,如果痛苦似[/color][url=http://chuanqishijie.fsifu.com/][color=black]传奇世界私服[/color][/url][color=black]星辰。那我的生活真是万里无云,漫天繁星……086◎避孕的效果:不成功,便成“人”。
087◎孤单是一个人的狂欢,狂欢是[/color][url=http://chuanqi.fsifu.com/][color=black]传奇私服[/color][/url][color=black]一群人的孤单。
088◎这世上最累的事情,莫过于眼睁睁看着自己的心碎了,还得自己动手把它粘起来。
089◎人生的悲惨在于:辛辛苦苦的作了[/color][url=http://moyu.fsifu.com/][color=black]魔域私服[/color][/url][color=black]一晚上内容香艳的美梦,第二天早上醒来居然全都记不起来了!
090◎父亲问我人生有什么追求?我回答金钱和美女,父亲凶狠的打了我的脸;我回答事业与爱情,父亲赞赏的摸了我的头。
091◎男人都好色,色心稍强一点叫[/color][url=http://www.igxy.com/game/runescape/][color=black]runescape[/color][/url][color=black]色狼,再强一点叫色鬼,更加强就叫色魔,尤其强那就成了变态色魔,好色到了极致,被称作人体美学艺术家。
092记得刚毕业不久的一天,女友给我发了[/color][url=http://www.suzhoulongjia.com/][color=black]苏州模具[/color][/url][color=black]一条短信:“我们还是分手吧!”我还没来得及伤心呢,女友又发来一条:“对不起,发错了。”这下可以彻底伤心了……
093◎此地禁止大小便,违者没收工具。[/color]
页:
[1]