IOCP(完成端口)开发手记(3)
当创建IOCP端口后,就要初始化连接监听,这跟一般的SOCKET是没有什么区别的,当然要把它关联到IOCP,否则就不会从IOCP那里得响应. 接着就会创建满足需要的接收请求,这样就会收到连接进来.
如果有连接进来,就会收在GetQueuedCompletionStatus函数里收到前面发出的请求包,接着就进行数据监听,或者数发送的请求.就可以进行这个连接的数据收发了.
我一直想搞清楚几个状态之间的变换.第一个就是从监听状态到连接进来,再到数据发送.然后到连接关闭.在IOCP里是怎么样来标志一个连接关闭呢?
通过查找MSDN帮助文档,看了不少资料,终于找到了. 要标志一个连接关闭,要查看两个东西,一个GetQueuedCompletionStatus函数就是接收到的数据lpNumberOfBytes为0,另一外就是GetLastError函数返回ERROR_SUCCESS. 上面两个条件满足后,就知道SOCKET关闭了.