最近在学习iocp,有几个问题没想明白,在这里请教各位: 
1.我在网上看到有人说iocp的难点在于如何保证socket的正确释放,否则可能出问题,为什么说使用IOCP时要保证socket的正确释放呢?如果socket没有正确释放会怎么样呢? 
2.使用iocp时要怎么做才能让socket正确释放呢? 

解决方案 »

  1.   

    这篇文章能解决楼主的问题

    IOCP中的socket错误和资源释放处理方法

    http://blog.chinaunix.net/u/20702/showart_258755.html
      

  2.   

    问题太泛了,注定了解答也会很泛。怎样才能正确的释放socket?用正确的方法释放socket....呵呵,有人说iocp的难点在于如何保证socket的正确释放,那你觉得你学习iocp的过程中哪里难?结合自己的实践吧。IOCP这东西出错的点多得很,socket的释放,重用,接收发送缓存区的管理,每个都不简单。有一个出问题就挂了。所以lz多实践吧,发现问题的时候再有针对性的google解决或者来这问楼上的牛人。
      

  3.   

    补充几点:
    1.在windows网络编程(第二版)提到iocp时最后这样说“在进行重叠io操作时,应避免强行释放OVERLAPPED结构”,为什么在进行重叠io操作时,应避免强行释放OVERLAPPED结构呢?2.使用IOCP时要让socket释放,直接调用closesocket函数不就可以了吗?貌似没什么难点的,难道还要考虑什么问题?
      

  4.   

    使用IOCP时要让socket释放,直接调用closesocket函数不就可以了吗?
    --------
    是可以,没什么难点。
    但是附加在这个句柄上的其它资源的释放呢?使用IOCP时,你可能会在一个SOCKET HANDLE上投递多个操作。现在客户断开closesocket。那么所有这个SOCKET投递的操作都会返回。这样会有N个地方需要你去释放资源。delete同一资源会显然会出错,你如何保证只释放一次。