社区
网络编程
帖子详情
如何设置tcp的连接超时时间?
lugangxyz
2004-07-07 02:13:20
setsockopt(sockServer,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout));
好像不行
...全文
3459
5
打赏
收藏
如何设置tcp的连接超时时间?
setsockopt(sockServer,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout)); 好像不行
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
horisly
2005-08-20
打赏
举报
回复
mark
AntonlioX
2005-06-28
打赏
举报
回复
mark
wangyangcheng
2005-06-10
打赏
举报
回复
Mark.
PiggyXP
2004-07-07
打赏
举报
回复
Socket中如何设置连接超时
设置connect的超时很简单,CSDN上也有人提到过使用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;
}
gracezhu
2004-07-07
打赏
举报
回复
http://community.csdn.net/Expert/topic/3122/3122204.xml?temp=.2910883
Socket编程例子
Socket编程例子
java
tcp
连接
超时
时间
设置
_如何在Socket建立
连接
时
设置
最大
超时
时间
?
前言在jdk1.4及以前版本中,从Socket中读取数据时,读取数据过程是阻塞进行的,且阻塞
时间
取决于数据发送方,但是通过
设置
读取数据最大
超时
时间
后,就不会一直处于阻塞状态。当然,1.4版本API中加入了NIO技术,可以通过NIO实现非阻塞I/O(no-blocking I/O)操作。示例下面我们通过socket的setSoTimeout()方法来
设置
超时
时间
(单位毫秒),当接收端在超出了
超时
时间
...
TCP
连接
超时
处理
首先
设置
socket描述符为非阻塞模式,然后调用connect建立
连接
,此时
连接
操作不会立即完成,会返回错误码EINPROGRESS。然后使用select或者epoll来监测socket的写事件,如果
超时
时间
内没有写事件到达,说明
连接
超时
。如果有写事件时,需要获取socket错误码,错误为0时表示
连接
成功,错误码不为0时表示
连接
失败。但是对于应用程序来说,这个
超时
时间
太长了,不利于一些业务的处理。比如说我的应用想通过建立
TCP
连接
来判断服务端程序是否在运行,或者网络是否通达,这时我不可能等127秒。
java
tcp
客户端长
连接
超时
时间
_
TCP
连接
的
超时
时间
无论你用任何语言或者是网络库,你都可以
设置
网络操作的
超时
时间
,特别是connect、read、write的
超时
时间
。你可以在代码中把
超时
时间
设置
任意大小值,但是connect方法会有一点特殊。connect的
超时
时间
在任意的内核实现上都有一个可以
设置
的最大值,你的代码中
设置
的
超时
值并不能超过这个最大值(即使你
设置
的值超过这个最大值,其仍然会在最大
超时
时间
后time out)。
tcp
建立
连接
的过程从...
linux
超时
tcp
,Linux中
TCP
设置
syn
超时
时间
无论您使用什么语言或客户端库,您都应该能够在网络套接字操作上
设置
超时
,通常将其拆分为
连接
超时
、读取
超时
和写入
超时
。但是,尽管您应该能够使这些
超时
尽可能小,但
连接
超时
尤其具有任何给定内核的有效最大值。在此点之外,您可能请求的较高
超时
值将不起作用 -
连接
在较短的
时间
后仍将
超时
。
TCP
连接
的特殊原因是,建立
TCP
连接
具有以 SYN 数据包为起点的特殊数据包序列。如果没有收到对此初始 SYN 数据...
网络编程
18,358
社区成员
64,186
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章