网络编程的4种IO模型

select
FD_ZERO初始化
FD_SET将socket加进去
select轮询
当socket的事件发生时,fd_set里面有相关的socket,如果没有socket有事件发生,select返回0
FD_ISSET检测,socket是否还在fd_set里,是的话,表示这个socket有事件发生

WSAAsyncSelect
WSAAsyncSelect将socket与对应的窗口过程绑定,并指定这个socket对哪些事件感兴趣
WSAGETSELECTERROR(lParam)得到错误
WSAGETSELECTEVENT(lParam)得到是哪个事件
wParam为socket

WSAEventSelect
WSACreateEvent创建一个事件
WSAEventSelect将socket与事件绑定
WSAWaitForMultipleEvents等待这些事件
WSAEnumNetworkEvents得到发生的通知FD_ACCEPT之类

WSAGetOverlappedResult
typedef struct _WSAOVERLAPPED {
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
WSAEVENT hEvent;
} WSAOVERLAPPED, *LPWSAOVERLAPPED;

WSAOVERLAPPED中的hEvent
WSACreateEvent创建一个事件
用WSARecv带WSAOVERLAPPED结构
用WSAWaitForMultipleEvents等待这些事件
用WSAGetOverlappedResult得到WSAOVERLAPPED结构

原文地址:https://www.cnblogs.com/ywledoc/p/2793246.html