创建一个与制定传送服务提供者绑定的套接口
此函数为socket()的扩展版本,其功能都是创建一个原始
套接字。使用时需要包含
winsock2.h 头文件和链接ws2_32.lib库。
SOCKET WSASocket( _In_ int af,//地址族规范,目前仅支持AF_INET格式 _In_ int type,//套接口类型,SOCK_STREAM:TCP SOCK_DGRAM:UDP _In_ int protocol, //特定协议,若不愿指定协议,可以规定为0 _In_ LPWSAPROTOCOL_INFO lpProtocolInfo, //指向结构的 指针,定义创建接口的特性,若非零,则前三个参数忽略。 _In_ GROUP g, //保留 _In_ DWORD dwFlags //套接口属性描述 );对应closesocket(...);
返回值:成功返回描述符参照;失败返回INVALID_SOCKET
WSAEVENT WSACreateEvent(void);
创建一个初始状态为失信的匿名的需要手动重置的事件对象
返回值:成功返回事件对象的句柄;失败返回WSA_INVALID_EVENT
int WSAEventSelect( _In_ SOCKET s, _In_ WSAEVENT hEventObject, _In_ long lNetworkEvents );//关联网络事件到事件句柄
其实调用该函数就是要告诉系统,如果有FD_ACCEPT事件发生的时候,就要让hWSAevent对象有信号。因为我们知道,一个事件对象有两种状态:有信号和无信号,而创建的时候默认的是无信号的,也是在无信号的情况下,我们的等待函数才会被阻塞(也就是为什么会采用该机制的原因了)。而当发生事件FD_ACCEPT(或其它如FD_READ、FD_WRITE、FD_CLOSE等)时让事件对象有信号,从而让等待函数被唤醒
让本地地址和socket相连接
int bind( _In_ SOCKET s, _In_ const struct sockaddr *name, //一个socket地址的结构体名,有sin_port sin_family sin_addr _In_ int namelen 结构体名的长度,一般为sizeof() );
返回失败的话为SOCKET_ERROR
listen是让一个置信的对象监听到来的连接
int listen( _In_ SOCKET s, _In_ int backlog //编译的最大长度连接 );返回失败的话也为SOCKET_ERROR
If no error occurs, listen returns zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.