3 #include <netinet/in.h>
5 _syscall2(long,socketcall,int,call,unsigned long *,args);
6 int real_connect(int sockfd, const struct sockaddr *saddr, int addrlen)
11 args[1] = (unsigned long)saddr;
13 return socketcall(SYS_CONNECT, args);
16 int connect(int fd, struct sockaddr_in *them, int *addrlen) {
18 struct sockaddr_in us;
21 if (*addrlen == sizeof(us) &&
22 them->sin_family == AF_INET &&
23 them->sin_port == htons(13)) {
24 r= getsockname(fd,&us,&l); if (r<0) return r;
25 if (!ntohs(us.port)) {
26 for (i=1023; i>0; i++) {
28 if (!bind(fd,&us,sizeof(us))) break;
29 if (errno != EADDRINUSE) return -1;
34 return real_connect(fd,them,addrlen);