socket connect 函数设置超时
来源:互联网 发布:网站源码免费下载 编辑:程序博客网 时间:2024/05/16 19:18
众所周知,在进行网络编程的时候,如果使用系统connect函数,无法设置超时,而在连接一个不存在的主机时,将会一直阻塞。
其实在调用connect函数时,将句柄设置为非阻塞,然后调用select函数,可以达到设置超时的效果。
- bool connect(char *host,int port,int timeout)
- {
- TIMEVAL Timeout;
- Timeout.tv_sec = timeout;
- Timeout.tv_usec = 0;
- struct sockaddr_in address; /* the libc network address data structure */
- sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- address.sin_addr.s_addr = inet_addr(host); /* assign the address */
- address.sin_port = htons(port); /* translate int2port num */
- address.sin_family = AF_INET;
- //set the socket in non-blocking
- unsigned long iMode = 1;
- int iResult = ioctlsocket(sock, FIONBIO, &iMode);
- if (iResult != NO_ERROR)
- {
- printf("ioctlsocket failed with error: %ld\n", iResult);
- }
- if(connect(sock,(struct sockaddr *)&address,sizeof(address))==false)
- {
- return false;
- }
- // restart the socket mode
- iMode = 0;
- iResult = ioctlsocket(sock, FIONBIO, &iMode);
- if (iResult != NO_ERROR)
- {
- printf("ioctlsocket failed with error: %ld\n", iResult);
- }
- fd_set Write, Err;
- FD_ZERO(&Write);
- FD_ZERO(&Err);
- FD_SET(sock, &Write);
- FD_SET(sock, &Err);
- // check if the socket is ready
- select(0,NULL,&Write,&Err,&Timeout);
- if(FD_ISSET(sock, &Write))
- {
- return true;
- }
- return false;
- }
- socket connect 函数设置超时
- socket connect 函数设置超时
- connect函数超时设置
- 设置socket的Connect超时
- 设置socket的Connect超时
- linux socket connect超时设置
- 设置socket的Connect超时
- 设置socket connect 超时时间
- setsockopt函数--设置connect超时
- 如何设置socket的Connect超时(linux)?
- 如何设置socket的Connect超时(linux)
- 如何设置socket的Connect超时(linux)
- 如何设置socket的Connect超时(linux)
- 如何设置socket的Connect超时(linux)
- 设置socket的Connect超时 (转)
- 如何设置socket的Connect超时(linux)
- linux下socket connect超时设置
- VC socket Connect 超时时间设置
- mysql 删除表中重复记录
- MyEclipse和Tomcat乱码问题设置
- 哈佛幸福课第三,四章读后感
- 单反不穷三代的方法
- Android推送方案分析(MQTT/XMPP/GCM
- socket connect 函数设置超时
- MyBatis入门介绍,凤凰涅槃:从 iBatis 到 MyBatis(转)
- vim操作全技巧
- 哈佛心理学(二)——嫉妒
- 与文字相拥 舞尽人间芳华
- android 5种存储数据方式
- 数据库设计
- php中 1和true及0和false的区别
- gedit打开中文乱码解决办法