]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Some UNIX types want the exact size of the address structure
authorGuido van Rossum <guido@python.org>
Fri, 12 Jun 1992 10:39:36 +0000 (10:39 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 12 Jun 1992 10:39:36 +0000 (10:39 +0000)
Modules/socketmodule.c

index 200310e61fc34ef6a5bdb8c311d2858dc770332c..21ddf62bbd83432aa80c256acd7a6755e118d7b5 100644 (file)
@@ -317,6 +317,39 @@ getsockaddrarg(s, args, addr_ret, len_ret)
 }
 
 
+/* Get the address length according to the socket object's address family. 
+   Return 1 if the family is known, 0 otherwise.  The length is returned
+   through len_ret. */
+
+static int
+getsockaddrlen(s, len_ret)
+       sockobject *s;
+       int *len_ret;
+{
+       switch (s->sock_family) {
+
+       case AF_UNIX:
+       {
+               *len_ret = sizeof (struct sockaddr_un);
+               return 1;
+       }
+
+       case AF_INET:
+       {
+               *len_ret = sizeof (struct sockaddr_in);
+               return 1;
+       }
+
+       /* More cases here... */
+
+       default:
+               err_setstr(SocketError, "getsockaddrarg: bad family");
+               return 0;
+
+       }
+}
+
+
 /* s.accept() method */
 
 static object *
@@ -329,7 +362,8 @@ sock_accept(s, args)
        object *res;
        if (!getnoarg(args))
                return NULL;
-       addrlen = sizeof addrbuf;
+       if (!getsockaddrlen(s, &addrlen))
+               return NULL;
        newfd = accept(s->sock_fd, (struct sockaddr *) addrbuf, &addrlen);
        if (newfd < 0)
                return socket_error();