使用IOCP怎样设置超时呢?

12 views
Skip to first unread message

WangYu 王宇

unread,
Mar 2, 2006, 9:27:39 PM3/2/06
to dev4s...@googlegroups.com
最近在研究IOCP,但是不知道怎样设置连接超时,即CLIENT端一段时间没有收发任何数据后,服务器端立即断开这个SOCKET连接。
谢谢先!

Ghost Cheng

unread,
Mar 2, 2006, 9:30:55 PM3/2/06
to dev4s...@googlegroups.com
hi WangYu :
 
这个问题只有自己做检测处理,通常是单独开一个线程监视,每个连接有一个lasttime的属性,每次发来数据的时候更新这个值,
检测线程每隔一段时间检测一下当前时间与lasttime的差值,超过你设定的时间,就closesocket


 
On 3/3/06, WangYu 王宇 <wyu...@gmail.com> wrote:
最近在研究IOCP,但是不知道怎样设置连接超时,即CLIENT端一段时间没有收发任何数据后,服务器端立即断开这个SOCKET连接。





--

Sincerely,
Ghost Cheng
Email : ghost...@gmail.com
Web : http://www.GhostSoft.net

WangYu 王宇

unread,
Mar 2, 2006, 9:33:30 PM3/2/06
to dev4s...@googlegroups.com
我看到setsockopt是可以设置超时的,但是我设置了不起作用,不知道为什么:-(

在06-3-3,Ghost Cheng <ghost...@gmail.com> 写道:
hi WangYu :
 
这个问题只有自己做检测处理,通常是单独开一个线程监视,每个连接有一个lasttime的属性,每次发来数据的时候更新这个值,
检测线程每隔一段时间检测一下当前时间与lasttime的差值,超过你设定的时间,就closesocket


 
On 3/3/06, WangYu 王宇 <wyu...@gmail.com> wrote:
最近在研究IOCP,但是不知道怎样设置连接超时,即CLIENT端一段时间没有收发任何数据后,服务器端立即断开这个SOCKET连接。


 



--

Sincerely,
Ghost Cheng
Email :




--
www.vgoo.cn
http://www.vgoo.cn/

Ghost Cheng

unread,
Mar 2, 2006, 9:36:40 PM3/2/06
to dev4s...@googlegroups.com
Hi WangYu:
 
setsockopt设置的是TCP的握手状态的超时,而不是连接后的超时。

 
On 3/3/06, WangYu 王宇 <wyu...@gmail.com> wrote:
我看到setsockopt是可以设置超时的,但是我设置了不起作用,不知道为什么:-(

在06-3-3,Ghost Cheng <ghost...@gmail.com > 写道:
hi WangYu :
 
这个问题只有自己做检测处理,通常是单独开一个线程监视,每个连接有一个lasttime的属性,每次发来数据的时候更新这个值,
检测线程每隔一段时间检测一下当前时间与lasttime的差值,超过你设定的时间,就closesocket


 
On 3/3/06, WangYu 王宇 <wyu...@gmail.com> wrote:
最近在研究IOCP,但是不知道怎样设置连接超时,即CLIENT端一段时间没有收发任何数据后,服务器端立即断开这个SOCKET连接。


 



--

Sincerely,
Ghost Cheng
Email :




--
www.vgoo.cn
http://www.vgoo.cn/


--

Sincerely,
Ghost Cheng

WangYu 王宇

unread,
Mar 2, 2006, 9:38:14 PM3/2/06
to dev4s...@googlegroups.com
那么就仅仅有你说的这种方法了吗?


在06-3-3,Ghost Cheng <ghost...@gmail.com> 写道:
Hi WangYu:
 
setsockopt设置的是TCP的握手状态的超时,而不是连接后的超时。

 
On 3/3/06, WangYu 王宇 <wyu...@gmail.com > wrote:
我看到setsockopt是可以设置超时的,但是我设置了不起作用,不知道为什么:-(

在06-3-3,Ghost Cheng <ghost...@gmail.com > 写道:
hi WangYu :
 
这个问题只有自己做检测处理,通常是单独开一个线程监视,每个连接有一个lasttime的属性,每次发来数据的时候更新这个值,
检测线程每隔一段时间检测一下当前时间与lasttime的差值,超过你设定的时间,就closesocket


 
On 3/3/06, WangYu 王宇 <wyu...@gmail.com> wrote:
最近在研究IOCP,但是不知道怎样设置连接超时,即CLIENT端一段时间没有收发任何数据后,服务器端立即断开这个SOCKET连接。


 



--

Sincerely,
Ghost Cheng
Email :




--
www.vgoo.cn
http://www.vgoo.cn/


--

Sincerely,
Ghost Cheng
Email :




--
www.vgoo.cn
http://www.vgoo.cn/

Ghost Cheng

unread,
Mar 2, 2006, 9:40:08 PM3/2/06
to dev4s...@googlegroups.com
Hi WangYu:
 
呵呵,我可以很严肃的、很郑重的、很负责任的告诉你。。。。。。是的。

 
那么就仅仅有你说的这种方法了吗?

WangYu 王宇

unread,
Mar 2, 2006, 9:43:00 PM3/2/06
to dev4s...@googlegroups.com
关于超时的处理虽然很失望,但是非常谢谢你的回答。

那么就仅仅有你说的这种方法了吗?

Ghost Cheng

unread,
Mar 2, 2006, 9:45:16 PM3/2/06
to dev4s...@googlegroups.com
Hi WangYu:
 
呵呵,不用谢,助人乃快乐之本嘛~

 
关于超时的处理虽然很失望,但是非常谢谢你的回答。


ppmsn2005

unread,
Mar 2, 2006, 10:03:58 PM3/2/06
to dev4s...@googlegroups.com
真的吗? BSD socket 高级可以设定超时的。 win socket 就这么菜?

sunway

unread,
Mar 3, 2006, 6:19:10 AM3/3/06
to 高性能网络编程邮件列表
hi wangyu:
关于这个问题我以前想过很多次,查找过很多API,都是不支持的。后来只有才用和Ghost
cheng一样的办法解决的。
BTW:

我最近在看WINDOWS原代码时候发现,WINDOWS内部是支持从一个工作队列中删除超时的任务。具体代码在queueobj.c里。不知道什么原因,WINDOWS没有公开这个接口。
PLIST_ENTRY
KeRemoveQueue (
IN PRKQUEUE Queue,
IN KPROCESSOR_MODE WaitMode,
IN PLARGE_INTEGER Timeout OPTIONAL //超时
)

我感觉IOCP是通过QUEUE来实现的。所有任务在QUEUE排队,添加任务是调用WSARecv,WSASend,应该这个时候是可以设置超时的。

Reply all
Reply to author
Forward
0 new messages