#include #include #include #include #include #include #include #include #include #include static int set_nonblock(int fd) { int fl; fl = fcntl(fd, F_GETFL); if(fl==-1) return -1; if(!fcntl(fd, F_SETFL, fl|O_NONBLOCK)) return 0; return -1; } static int do_connect(uint32_t b_addr, uint16_t b_port, uint32_t addr, uint16_t port) { struct sockaddr_in ba, sa; int fd; bzero(&ba, sizeof(ba)); ba.sin_family = AF_INET; ba.sin_addr.s_addr = b_addr; ba.sin_port = htons(b_port); bzero(&sa, sizeof(sa)); sa.sin_family = AF_INET; sa.sin_addr.s_addr = addr; sa.sin_port = htons(port); if((fd = socket(PF_INET, SOCK_STREAM, 0))<0) { fprintf(stderr,"socket() error %d (%s)\n", errno, strerror(errno)); return -1; } if(b_addr!=0xFFFFFFFF && bind(fd, (struct sockaddr*)&ba, sizeof(ba))<0) { fprintf(stderr,"bind() error %d (%s)\n", errno, strerror(errno)); return -1; } if(set_nonblock(fd)<0) { fprintf(stderr,"set_nonblock() error %d (%s)\n", errno, strerror(errno)); return -1; } if(connect(fd, (struct sockaddr*)&sa, sizeof(sa))<0 && errno!=EINPROGRESS) { fprintf(stderr,"connect() error %d (%s)\n", errno, strerror(errno)); return -1; } return 0; } int main(int argc, char **argv) { int i, j; uint32_t addr, raddr; j = atoi(argv[1]); addr = inet_addr(argv[2]); raddr = inet_addr(argv[3]); for(i=0; i