#include #include #include #include #include #include #include #include #define HOST "192.168.0.1" #define PORT 22 void handler(int); int main(int argc, char **argv) { struct sockaddr_in saddr; int ret; int fd; int i; char buf[BUFSIZ]; int val; int c; unsigned short port = PORT; size_t len; char *host = HOST; val = 0; len = sizeof(val); while ((c = getopt(argc, argv, "h:p:")) != -1) { switch (c) { case 'h': host = strdup(optarg); break; case 'p': port = atoi(optarg); break; default: break; } } memset(&saddr, 0, sizeof(struct sockaddr_in)); saddr.sin_family = AF_INET; saddr.sin_port = htons(port); saddr.sin_addr.s_addr = inet_addr(host); fd = socket(AF_INET, SOCK_STREAM, 0); if (fd < 0) { printf("socket\n"); exit(1); } val = fcntl(fd, F_GETFL); if (val < 0) { printf("fcntl get\n"); exit(1); } ret = fcntl(fd, F_SETFL, val | O_NONBLOCK); if (ret < 0) { printf("fcntl set\n"); exit(1); } for (i = 1 ;; i++) { errno = 0; printf("entering %d connect\n", i); ret = connect(fd, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in)); printf("leaving %d connect, error %d msg = %s\n", i, errno, strerror(errno)); if (errno == EISCONN) break; } close(fd); exit(0); } void handler(int signo) { alarm(1); printf("in signal hander\n"); return ; }