ConnectEx是一个极其必要的API,这个函数允许重叠的连续调用。

 
  
  1. BOOL PASCAL ConnectEx( 
  2.   __in          SOCKET s, 
  3.   __in          const struct sockaddr* name, 
  4.   __in          int namelen, 
  5.   __in_opt      PVOID lpSendBuffer, 
  6.   __in          DWORD dwSendDataLength, 
  7.   __out         LPDWORD lpdwBytesSent, 
  8.   __in          LPOVERLAPPED lpOverlapped 
  9. ); 

s是预先绑定的套接字。name表示将要连接到的远程地址。namelen是这个套接字地址结构的长度。lpSendBuffer是一个可选指针,它指向建立连接之后将要发送的存储块。而dwSendDataLength指明将要发送的字节数。lpdwBytesSent被更新之后用来指明,在建立连接之后如果操作立刻完成的话,成功发送的字节数。lpOverlapped是和该操作管理的OVERLAPPED结构。这个扩展函数只可以用重叠方式调用。

就像AcceptEx函数一样,ConnectEx是为执行而设计的,因此任何预先设定的套接字选项或属性都不会自动拷贝到连接套接字。为了达到这一目的,在建立连接之后,应用程序必须在套接字上调用SO_UPDATE_CONNECT_CONTEXT。

传递到ConnectEx的套接字必须预先使用一个bind调用对之进行绑定。有一个重叠版本的连接,在建立连接后,可以选择性的多发送一个数据库。