]> Zhao Yanbai Git Server - minix.git/commitdiff
Added shutdown. EBADIOCTL in connect. Chaned some debug output.
authorPhilip Homburg <philip@cs.vu.nl>
Fri, 29 Jul 2005 10:13:52 +0000 (10:13 +0000)
committerPhilip Homburg <philip@cs.vu.nl>
Fri, 29 Jul 2005 10:13:52 +0000 (10:13 +0000)
lib/ip/Makefile
lib/ip/connect.c
lib/ip/shutdown.c [new file with mode: 0644]
lib/ip/socket.c

index fed1b163a1ecb6cc9df41b1d93a8c63705db3d47..1634f1feb9fa4d19fe63752d9d1ec0ff7264465a 100755 (executable)
@@ -53,6 +53,7 @@ OBJECTS       = \
        $(LIBRARY)(sethostent.o) \
        $(LIBRARY)(setsockopt.o) \
        $(LIBRARY)(servxcheck.o) \
+       $(LIBRARY)(shutdown.o) \
        $(LIBRARY)(socket.o) \
        $(LIBRARY)(strcasecmp.o) \
 
@@ -192,6 +193,9 @@ $(LIBRARY)(setsockopt.o):   setsockopt.c
 $(LIBRARY)(servxcheck.o):      servxcheck.c
        $(CC1) servxcheck.c
 
+$(LIBRARY)(shutdown.o):        shutdown.c
+       $(CC1) shutdown.c
+
 $(LIBRARY)(socket.o):  socket.c
        $(CC1) socket.c
 
index 295bb8c95cf7e58521618871750670f3afc97425..86ce310e47e1142edad2971c0f0d75155ddc2f6b 100644 (file)
@@ -23,7 +23,7 @@ int connect(int socket, const struct sockaddr *address,
        nwio_tcpconf_t tcpconf;
 
        r= ioctl(socket, NWIOGTCPCONF, &tcpconf);
-       if (r != -1 || errno != ENOTTY)
+       if (r != -1 || (errno != ENOTTY && errno != EBADIOCTL))
        {
                if (r == -1)
                {
@@ -68,7 +68,7 @@ static int _tcp_connect(int socket, const struct sockaddr *address,
        {
                int  t_errno= errno;
 
-               fprintf(stderr, "setconf failed: %s\n", strerror(errno));
+               fprintf(stderr, "connect(tcp) failed: %s\n", strerror(errno));
 
                errno= t_errno;
 
@@ -82,7 +82,7 @@ static int _tcp_connect(int socket, const struct sockaddr *address,
        {
                int  t_errno= errno;
 
-               fprintf(stderr, "connect failed: %s\n", strerror(errno));
+               fprintf(stderr, "connect(tcp) failed: %s\n", strerror(errno));
 
                errno= t_errno;
        }
diff --git a/lib/ip/shutdown.c b/lib/ip/shutdown.c
new file mode 100644 (file)
index 0000000..128ded5
--- /dev/null
@@ -0,0 +1,54 @@
+#include <errno.h>
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+
+#include <net/gen/in.h>
+#include <net/gen/tcp.h>
+#include <net/gen/tcp_io.h>
+
+#define DEBUG 1
+
+static int _tcp_shutdown(int socket, int how);
+
+int shutdown(int socket, int how)
+{
+       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_shutdown(socket, how);
+       }
+#if DEBUG
+       fprintf(stderr, "shutdown: not implemented for fd %d\n", socket);
+#endif
+       errno= ENOSYS;
+       return -1;
+}
+
+static int _tcp_shutdown(int socket, int how)
+{
+       int r;
+
+       if (how == SHUT_WR || how == SHUT_RDWR)
+       {
+               r= ioctl(socket, NWIOTCPSHUTDOWN, NULL);
+               if (r == -1)
+                       return -1;
+               if (how == SHUT_WR)
+                       return 0;
+       }
+
+       /* We can't shutdown the read side of the socket. */
+       errno= ENOSYS;
+       return -1;
+}
+
+
index 95a7fd0ebb2e11f9d050dd0217016622f3751e0a..70a812e1efa204f84696aa8e4d8bd075bdfb0018 100644 (file)
@@ -1,5 +1,6 @@
 #include <errno.h>
 #include <fcntl.h>
+#include <signal.h>
 #include <stdio.h>
 #include <sys/socket.h>
 
@@ -12,6 +13,10 @@ static int _udp_socket(int protocol);
 
 int socket(int domain, int type, int protocol)
 {
+#if DEBUG
+       fprintf(stderr, "socket: domain %d, type %d, protocol %d\n",
+               domain, type, protocol);
+#endif
        if (domain != AF_INET)
        {
 #if DEBUG
@@ -52,6 +57,7 @@ static int _tcp_socket(int protocol)
 static int _udp_socket(int protocol)
 {
        int fd;
+
        if (protocol != 0)
        {
 #if DEBUG