windows客户端强制结束进程, epoll_wait收不到事件通知(不能完全收到)

本帖最后由 mstemp 于 2011-02-17 14:06 编辑

epoll_event evt[1000];
int iret = epoll_wait(epfd, evt, 1000, -1);
if (0 < iret)
{
    for (i = 0; i < iret; i++)
    {
        int irecv = recv(...);
    }
}

创建服务端, 在windows下用1000个socket客户端与服务端建立连接, 然后不调用closesocket关闭socket, 直接结束掉该windows下的进程,
此时, epoll_wait不会收到1000个socket的关闭事件, 也就是说epoll_wait经过多次唤醒, 直到
再次阻塞, iret的总和都没有达到1000(只有1,2百个), 导致服务端不能正确的释放资源.

问题: 请问为什么windows客户端强制结束进程, epoll_wait不能收到所有的客户端关闭事件通知呢?
但是如果在linux下创建1000个socket连接的话, killall -9 强制结束进程, epoll_wait却是可以正确收到1000个关闭通知的.

作者: mstemp   发布时间: 2011-02-16

郁闷, 弄了几天, 发现是虚拟机的原因.

作者: mstemp   发布时间: 2011-02-18