IOCP服务器端如何主动关闭连接

IOCP服务器端怎么主动关闭连接
当接收到一个连接后,先向其投递一个WSARecv的操作,等待操作完成,当操作完成后处理数据,然后再次发送一个WSARecv请求来等待下次的数据。

上面的逻辑没有问题吧?

如果是客户端主动关闭了连接,接收操作会完成,并且numberOfBytes的值为零,服务器就可以调用closesocket来关闭连接了

可如果我要服务器主动关闭连接,按理说closesocket之后客户端应该也能收到消息的

当我再一次接收操作完成,投递下一个接收操作之前关闭连接的话,客户端可以正常收到连接关闭的消息

可当用另外的线程来关闭连接时(这时候应该还有一个未完成的Recv操作),客户端就不知道连接已经关闭了

再有,就是socket已经关闭了,那么之前投递的那个Recv操作不是就永远不能完成了?
------解决方案--------------------
对了,当我关闭连接时,调用shutdown(sock, SD_SEND)总是失败,错误码是10057,不知道是什么原因
------解决方案--------------------

if(INVALID_SOCKET!=m_Socket)
{
CancelIo((HANDLE)m_Socket);
closesocket(m_Socket);
m_Socket=INVALID_SOCKET;
        }

------解决方案--------------------
closesocket隐含执行了shutdown,可以执行从容关闭确保数据都被接收。
------解决方案--------------------
如果套接字关闭,那么在此套接字投递的所有操作就无法完成,就需释放投递的缓冲区。。。
------解决方案--------------------
关闭套接字后,之前的操作失败的,GetQueueCompletionStatus函数可以获取到那个操作,但是返回值是-1
------解决方案--------------------
我是在那个返回错误后释放的那个OVERLAPPED的东西
------解决方案--------------------
未知楼主问题解决了没?
   可否共享?