connect 、recv、send 超时解决方案
来源:互联网 发布:网络通信设备的名字 编辑:程序博客网 时间:2024/05/16 03:32
问题:经验分享1: connect 、recv、send 超时解决方案 ( 积分:0, 回复:19, 阅读:756 )
分类:Internet/TCPIP ( 版主:luyear, robertcool ) 来自:leaber, 时间:2005-6-7 17:34:00, ID:3097068[显示:小字体 | 大字体]
分类:Internet/TCPIP ( 版主:luyear, robertcool ) 来自:leaber, 时间:2005-6-7 17:34:00, ID:3097068[显示:小字体 | 大字体]
好多朋友在问这个问题,希望我的文档能对大家有所帮助~~!!
CONNECT 连接超时解决方案
和send recv 超时解决方案
leaber
2004-10-12整理测试
做网络程序中会经常见到判断CONNECT超时的问题,解决的思路是这样的,
首先把要连接服务器的SOCKET转换为非阻塞方式后进行连接,然后利用
时间差值来判断是否超时。
如果成功的话就把SOCKET再设为阻塞方式,当然如果超时的话你就看着办吧!
时间差值的计算方式有好多种,我的实现方式是以SELECT来实现的.
===============这里是我成功测试的代码==========================
Skt := Socket(AF_INET, 1, 0);
ca.sin_family := AF_INET;
ca.sin_port := htons(80);
FD_ZERO(fs);
FD_SET(skt, fs);
timeout.tv_sec := 10;
timeout.tv_usec := 500;
//在这里完成CONNECT超时检查的功能
ulB := 1;
ioctlsocket(Skt, FIONBIO, ulB);
if Connect(skt, ca, sizeof(ca)) = SOCKET_ERROR then
begin
if (WSAGetLastError() = WSAEWOULDBLOCK) then
begin
FD_ZERO(fs);
FD_SET(skt, fs);
rc := select(0, nil, @fs, nil, @Timeout);
end;
end;
if rc = 0 then
begin
//ShowMessage('connect overtime!');
CloseSocket(skt);
exit;
end;
ulB := 0;
ioctlsocket(Skt, FIONBIO, ulB);
//CONNECT 超时功能结束
通过SETSOCKOPT可以完成对RECV和SEND相应的超时设置!
//完成SETSOCKOPT 进行相应的发送和接收的超时
timeout1 := 5000;
if SetSockOpt(skt, SOL_SOCKET, SO_SNDTIMEO, pchar(@TimeOut1), SizeOf(TimeOut1)) <> 0
then
Exit;
if SetSockOpt(skt, SOL_SOCKET, SO_RCVTIMEO, pchar(@TimeOut1), SizeOf(TimeOut1)) <> 0
then
Exit;
CONNECT 连接超时解决方案
和send recv 超时解决方案
leaber
2004-10-12整理测试
做网络程序中会经常见到判断CONNECT超时的问题,解决的思路是这样的,
首先把要连接服务器的SOCKET转换为非阻塞方式后进行连接,然后利用
时间差值来判断是否超时。
如果成功的话就把SOCKET再设为阻塞方式,当然如果超时的话你就看着办吧!
时间差值的计算方式有好多种,我的实现方式是以SELECT来实现的.
===============这里是我成功测试的代码==========================
Skt := Socket(AF_INET, 1, 0);
ca.sin_family := AF_INET;
ca.sin_port := htons(80);
FD_ZERO(fs);
FD_SET(skt, fs);
timeout.tv_sec := 10;
timeout.tv_usec := 500;
//在这里完成CONNECT超时检查的功能
ulB := 1;
ioctlsocket(Skt, FIONBIO, ulB);
if Connect(skt, ca, sizeof(ca)) = SOCKET_ERROR then
begin
if (WSAGetLastError() = WSAEWOULDBLOCK) then
begin
FD_ZERO(fs);
FD_SET(skt, fs);
rc := select(0, nil, @fs, nil, @Timeout);
end;
end;
if rc = 0 then
begin
//ShowMessage('connect overtime!');
CloseSocket(skt);
exit;
end;
ulB := 0;
ioctlsocket(Skt, FIONBIO, ulB);
//CONNECT 超时功能结束
通过SETSOCKOPT可以完成对RECV和SEND相应的超时设置!
//完成SETSOCKOPT 进行相应的发送和接收的超时
timeout1 := 5000;
if SetSockOpt(skt, SOL_SOCKET, SO_SNDTIMEO, pchar(@TimeOut1), SizeOf(TimeOut1)) <> 0
then
Exit;
if SetSockOpt(skt, SOL_SOCKET, SO_RCVTIMEO, pchar(@TimeOut1), SizeOf(TimeOut1)) <> 0
then
Exit;
- connect 、recv、send 超时解决方案
- connect、send、recv函数如何设置超时
- send/recv的超时模拟
- linux 设置send、recv超时
- recv()与send()设置超时
- 用setsockopt设置send(),recv()设置超时
- ACE_SOCK_Stream send和recv超时设置
- Linux 下socket超时(connect超时/recv超时)
- Linux 下socket超时(connect超时/recv超时)
- Linux 下socket超时(connect超时/recv超时)
- Linux 下socket超时(connect超时/recv超时)
- Linux 下socket超时(connect超时/recv超时)
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- [转]socket的send、recv阻塞设置阻塞超时时间
- 用setsockopt()来控制recv()与send()的超时
- 卸载程序
- linux创建大文件
- 发送SMS、MMS
- 部分开源网址
- 发送彩信
- connect 、recv、send 超时解决方案
- valueCommit
- Application Resources
- 路径规划
- C++内存池实现实例(转)
- 获取本机电话号码
- 检查SD卡是否存在
- VC++文件操作(转)
- 查看内存存储