SOCKET 与 完成端口的关系疑问.解决方案

SOCKET 与 完成端口的关系疑问.
这几天在看完成端口,有几个点不太明白,望高手指教:
1   完成端口IOCP是个通知队列,有 "事 "发生就会唤醒一个工作线程来解决之.IOCP不是专门为SOCKET设计的,那IOCP怎么知道发生的 "事 "与SOCKET的对应关系呢?也就是说:IOCP怎么知道挂在其上的SOCKET发生了什么事呢?(数据出   ?   数据入   ?   ACCEPT连接?)
        我的理解:IOCP   和SOCKET   都是基于通用的IO模型,因此数据出/数据入是用相同的方式描述的,所以IOCP能把正确的事告诉上层.不知对否?   但另一个疑问:ACCEPT事件(或者CONNECT事件)属于SOCKET专有的,IOCP不可能区分吧?而我看到很多资料说,IOCP也能把这两种事件的完成通报给上层,这是瞎说的还是什么的?
        IOCP把事件通报上层时,事件类型是由   OVERLAPPED   这么个东西里的成员来确定的.我想知道,IOCP是如何区分   "不同的IO类型 "的IO事件的(文件/SOCKET...),从而给OVERLAPPED里的成员标上正确的值.
        谢谢!

------解决方案--------------------
因工作需要,我最近也在看网络编程。对这个问题我的理解是,实际上IOCP只知道有“事“发生,至于是什么事,它并不知道。它知道有事发生我想最终也是查询相应的Event object对象的置信状态获知的,而Event Object的置信状态是其对应的IO对象进行设置的。事实上我们在调用WSASend和WSARecv时都通过OverLapped向Socket传递了一个EventObject,而且我们还可以通过WSASelectEvent设置我们需要Socket通知的事件。以上是我的理解,希望能相互学习,一起进步!