]> Zhao Yanbai Git Server - minix.git/commitdiff
Patch by claudio for lynx
authorBen Gras <ben@minix3.org>
Thu, 1 Sep 2005 14:59:28 +0000 (14:59 +0000)
committerBen Gras <ben@minix3.org>
Thu, 1 Sep 2005 14:59:28 +0000 (14:59 +0000)
lib/ip/getsockname.c

index a58f971753b354147b8ced4e20f9a7130ec62429..034b247e393a4f2a9c9ce1b833375dee317013fc 100644 (file)
@@ -1,3 +1,12 @@
+/*
+
+   getsockname()
+
+   from socket emulation library for Minix 2.0.x
+
+*/
+
+
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
 #include <net/gen/udp.h>
 #include <net/gen/udp_io.h>
 
-#define DEBUG 0
 
-static int _tcp_getsockname(int socket, struct sockaddr *_RESTRICT address,
-       socklen_t *_RESTRICT address_len, nwio_tcpconf_t *tcpconfp);
+#define DEBUG 1
 
-int getsockname(int socket, struct sockaddr *_RESTRICT address,
-       socklen_t *_RESTRICT address_len)
+/*
+   getsockname...
+*/
+int getsockname(int fd, struct sockaddr *_RESTRICT address, 
+   socklen_t *_RESTRICT address_len)
 {
-       int r;
        nwio_tcpconf_t tcpconf;
-
-       r= ioctl(socket, NWIOGTCPCONF, &tcpconf);
-       if (r != -1 || errno != ENOTTY)
-       {
-               if (r == -1)
-               {
-                       /* Bad file descriptor */
-                       return -1;
-               }
-               return _tcp_getsockname(socket, address, address_len,
-                       &tcpconf);
-       }
-
-#if DEBUG
-       fprintf(stderr, "getsockname: not implemented for fd %d\n", socket);
-#endif
-       errno= ENOSYS;
-       return -1;
-}
-
-static int _tcp_getsockname(int socket, struct sockaddr *_RESTRICT address,
-       socklen_t *_RESTRICT address_len, nwio_tcpconf_t *tcpconfp)
-{
        socklen_t len;
        struct sockaddr_in sin;
 
+#ifdef DEBUG
+       fprintf(stderr,"mnx_getsockname: ioctl fd %d.\n", fd);
+#endif
+       if (ioctl(fd, NWIOGTCPCONF, &tcpconf)==-1) {
+#ifdef DEBUG
+          fprintf(stderr,"mnx_getsockname: error %d\n", errno);
+#endif
+          return (-1);
+          }
+#ifdef DEBUG1
+       fprintf(stderr, "mnx_getsockname: from %s, %u",
+                       inet_ntoa(tcpconf.nwtc_remaddr),
+                       ntohs(tcpconf.nwtc_remport));
+       fprintf(stderr," for %s, %u\n",
+                       inet_ntoa(tcpconf.nwtc_locaddr),
+                       ntohs(tcpconf.nwtc_locport));
+#endif
+/*
+       addr->sin_addr.s_addr = tcpconf.nwtc_remaddr ;
+       addr->sin_port = tcpconf.nwtc_locport;
+*/
        memset(&sin, '\0', sizeof(sin));
        sin.sin_family= AF_INET;
-       sin.sin_addr.s_addr= tcpconfp->nwtc_locaddr;
-       sin.sin_port= tcpconfp->nwtc_locport;
+       sin.sin_addr.s_addr= tcpconf.nwtc_remaddr ;
+       sin.sin_port= tcpconf.nwtc_locport;
 
        len= *address_len;
        if (len > sizeof(sin))
@@ -61,3 +68,10 @@ static int _tcp_getsockname(int socket, struct sockaddr *_RESTRICT address,
        return 0;
 }
 
+
+
+
+
+
+
+