网络编程的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结构