#include #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char **argv) { fd_set infd; fd_set exceptfd; struct sockaddr_in sin; struct timeval tv; int i; int ret; int s; int f; memset(&sin, 0, sizeof(sin)); sin.sin_addr.s_addr = inet_addr("127.0.0.1"); sin.sin_port = htons(22); sin.sin_len = sizeof(sin); sin.sin_family = AF_INET; s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); fcntl(s, F_GETFL, &f); f |= O_NONBLOCK; fcntl(s, F_SETFL, &f); connect(s, (struct sockaddr *)&sin, sizeof(sin)); FD_ZERO(&infd); FD_ZERO(&exceptfd); FD_SET(s, &infd); FD_SET(s, &exceptfd); tv.tv_sec = 10; tv.tv_usec = 0; ret = select(s + 1, &infd, NULL, &exceptfd, NULL); if (ret == -1) { perror("select"); exit(EXIT_FAILURE); } printf("Select returned %d\n", ret); for (i = 0; i < FD_SETSIZE; i++) if (FD_ISSET(i, &infd)) printf("%d is set in infd\n", i); for (i = 0; i < FD_SETSIZE; i++) if (FD_ISSET(i, &exceptfd)) printf("%d is set in exceptfd\n", i); exit(EXIT_SUCCESS); }