select() ============== sock_fd = socket(AF_INET,SOCK_STREAM,0) arg = fcntl(sock_fd , F_GETFL, NULL); arg |= O_NONBLOCK; fcntl(sock_fd, F_SETFL, arg); ret = connect(sock_fd, (struct sockaddr *)&address, sizeof(address)); if (ret < 0) { if (errno == EINPROGRESS) { tv.tv_sec = 0; tv.tv_usec = 1000; //1ms FD_ZERO(&myset); FD_SET(sock_fd , &myset); if (select(sock_fd +1, NULL, &myset, NULL, &tv) > 0) { lon = sizeof(int); getsockopt(sock_fd , SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon); if (valopt) { fprintf(stderr, " SO_ERROR in connection %d - %s\n", valopt, strerror(valopt)); exit(0); } } else { fprintf(stderr, "Select Timedout or error - %s\n", strerror(errno)); exit(0); } } }