+++ /dev/null
-/**/
-
-#include <netinet/in.h>
-
-_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);
-}