//---------------------Linux----------------------- #define INVALID_SOCKET -1 int skt = socket(AF_INET, SOCK_STREAM, 0); // 设为阻塞模式 int flags = fcntl(skt, F_GETFL, 0); flags &= (~O_NONBLOCK); fcntl(hSocket, F_SETFL, flags); // 设为非阻塞模式 int flags = fcntl(skt, F_GETFL, 0); flags |= O_NONBLOCK; fcntl(hSocket, F_SETFL, flags); // 设为地址可重用模式 int iOpt = 1; int iOptLen = sizeof(iOpt); setsockopt(skt, SOL_SOCKET, SO_REUSEADDR, (char*)&iOpt, iOptLen); //设置接收超时 int iMS = 1000; int iRet = setsockopt(skt, SOL_SOCKET, SO_RCVTIMEO, (char*)&iMS, sizeof(int)); //---------------------Windows--------------------- SOCKET socket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); // 设为阻塞模式 u_long cmd_value = 0; ioctlsocket(socket, FIONBIO, &cmd_value); // 设为非阻塞模式 u_long cmd_value = 1; ioctlsocket(socket, FIONBIO, &cmd_value); // 设为地址可重用模式 int iOpt = 1; int iOptLen = sizeof(iOpt); setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, (char*)&iOpt, iOptLen);