/**/ #include _syscall2(long,socketcall,int,call,unsigned long *,args); int real_connect(int sockfd, const struct sockaddr *saddr, int addrlen) { unsigned long args[3]; args[0] = sockfd; args[1] = (unsigned long)saddr; args[2] = addrlen; return socketcall(SYS_CONNECT, args); } int connect(int fd, struct sockaddr_in *them, int *addrlen) { int r,l; struct sockaddr_in us; pid_t c; if (*addrlen == sizeof(us) && them->sin_family == AF_INET && them->sin_port == htons(13)) { r= getsockname(fd,&us,&l); if (r<0) return r; if (!ntohs(us.port)) { for (i=1023; i>0; i++) { us.port= htons(i); if (!bind(fd,&us,sizeof(us))) break; if (errno != EADDRINUSE) return -1; } if (!i) return -1; } } return real_connect(fd,them,addrlen); }