Create Socket
Struct SockAddr_in addr; addr.sin_family = af_INET;
// server address addr.sin_addr.s_addr = inet_addr (host); // server port addr.sin_port = htons (port);
// Creating Socket IF ((SoC = Socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) == Invalid_Socket) Throw connector_exception ("Connector: can't create socket);
2. Connect
IF (:: Connect (STRUCKADDR *) & addr, sizeof (addr) == SOCKET_ERROR) THROW Connector_Exception ("Connector: CAN't Connect.");
3. Set to non-blocking SOCKET
Unsigned long ul = 1; int RET = ioctlsocket (Rec (), fionbio, (unsigned long *) & ul); if (RET == Socket_ERROR) log << "ioctlsocket error" << ENDL; 4. Select Socket
FD_ZERO (& r_readfds); fd_zero (& R_EXFDS); fd_set (REC (), & r_readfds; fd_set (REC (), & r_exfds; if ((IRET = SELECT (0, & r_readfds, null, & r_exfds, & TV)) == SOCKET_ERROR) {After each call SELECT, the SELECT function automatically sets R_READFDS, R_EXFDS, must be reused fd_zero (& r_Eadfds); fd_zero (& r_exfds); fd_set (REC (), & r_readfds); fd_set (REC (), & r_exfds Otherwise, the 10022 WSAEINVAL error is automatically emptied because SELECT will automatically empty R_READFDS, R_EXFDS. However, if it is not overtime, it will not be emptied, so you want to call fd_zero (& r_readfds); fd_zero (& r_exfds);
5 reference
Http://support.microsoft.com/kb/q147714/