请教了 iocp 下,如何设置socket 的recv超时
在写服务器程序,比较常见的一个问题是,当socket 连上来以后,它可能继没有数据发送也没有接受。
那么这个连接就会挂在那里。 假设这样的链接是恶意的, 那么他会大量消耗你的资源。
所以我希望进行一次WSARecv 投递以后, 能在一定时间内超时, 那么我就可以根据情况进行处理了。
len = 10 * 1000;
Ret = setsockopt(Accept, SOL_SOCKET, SO_RCVTIMEO , &len , sizeof(len));
printf("Ret %d %d\n", Ret, WSAGetLastError());
代码很简单, 在accept 以后, 设置socket 的recv 超时, 如果不使用iocp, 就使用见得的recv 肯定
能在超时以后,获得一个结果。
但是在iocp的例子里面,我发现超时以后,无法GetQueuedCompletionStatus 获得消息,那么这样我就很被动了
现在我起了线程定时扫描所有的socket ,效率很低,希望能解决这个问题。