1 面向连接的协议
1.1 服务器端函数
1.1.1 bind( )
一旦为某种特定协议创建了套接字,就必须将套接字绑定到一个已知地址:
intbind( SOCKET s, const struct sockaddr* addr, int addrlen );
1.1.2 listen( )
第二步是将套接字置入监听模式:
intlisten( SOCKET s, int backlog );
参数backlog指定了可以等待连接的最大队列长度。
1.1.3 accept( )和WSAAccept( )
通过accpet( )和WSAAccept(),可以为等待连接队列中的第一个连接请求提供服务。
SOCKETaccept( SOCKET s, struct sockaddr* addr, int* addrlen );
SOCKETWSAAccept( SOCKET s, struct sockaddr* addr, int* addrlen,
LPCONDITIONPROClpfnCondition, DWORD dwCallbackData);
参数addr返回发出连接请求的客户机的IP地址信息,而参数addrlen则返回参数addr的长度。
accept( )的返回值是一个新的套接字描述符,对于该客户机后续的所有操作,都使用这个新的套接字。原来的监听套接字仍然处于监听模式,用于接受其他客户机连接。
参数lpfnCondition指定一个回调函数,用于服务器收到连接请求后的处理,定义如下:
intCALLBACK ConditionFunc( LPWSABUF lpCallerId, IN
LPWSABUF lpCallerData, IN
LPQOS lpSQOS, IN/OUT
LPQOS lpGQOS, IN/OUT
LPWSABUF lpCalleeId,