最近在研究IOCP,但是不知道怎样设置连接超时,即CLIENT端一段时间没有收发任何数据后,服务器端立即断开这个SOCKET连接。
hi WangYu :这个问题只有自己做检测处理,通常是单独开一个线程监视,每个连接有一个lasttime的属性,每次发来数据的时候更新这个值,检测线程每隔一段时间检测一下当前时间与lasttime的差值,超过你设定的时间,就closesocket
On 3/3/06, WangYu 王宇 <wyu...@gmail.com> wrote:最近在研究IOCP,但是不知道怎样设置连接超时,即CLIENT端一段时间没有收发任何数据后,服务器端立即断开这个SOCKET连接。
--
Sincerely,
Ghost Cheng
Email :
我看到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连接。
--
www.vgoo.cn
http://www.vgoo.cn/
--
Sincerely,
Ghost Cheng
Email : ghost...@gmail.com
Web : http://www.GhostSoft.net
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连接。
--
www.vgoo.cn
http://www.vgoo.cn/
--
Sincerely,
Ghost Cheng
Email :
那么就仅仅有你说的这种方法了吗?
那么就仅仅有你说的这种方法了吗?
关于超时的处理虽然很失望,但是非常谢谢你的回答。
Email : ghost...@gmail.com
Web : http://www.GhostSoft.net
我最近在看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,应该这个时候是可以设置超时的。