调用closesocket()函数关闭Socket句柄,
按照MSDN的说法,在该Socket上所有阻塞的操作都将取消。
也就是说工作线程中对GetQueuedCompletionStatus的调用以失败将返回(如果该Socket上阻塞的操作),并且错误代码是WSA_OPERATION_ABORTED,但我在关闭Socket的时候,明明Socket上面有阻塞的操作,而GetQueuedCompletionStatus却总是返回成功?
请问这是为什么?
是不是我的理解有错误?

解决方案 »

  1.   

    错误 如果该Socket上阻塞的操作 改为 如果该Socket上有阻塞操作
      

  2.   

    Any pending overlapped send and receive operations (WSASend/WSASendTo/WSARecv/WSARecvFrom with an overlapped socket) issued by any thread in this process are also canceled. Any event, completion routine, or completion port action specified for these overlapped operations is performed. The pending overlapped operations fail with the error status WSA_OPERATION_ABORTED.
      

  3.   

    我调了closesocket,好象完成端口都没有收到通知
      

  4.   

    在调用closesocket()之前调用CancelIO()就可以了。
    closesocket()在套解字存在待决数据时是不会立即
    生效的。CancelIO能取消完成端口对于正在pending的IO操作