diff options
author | Guido van Rossum <guido@python.org> | 1992-08-05 19:00:45 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1992-08-05 19:00:45 (GMT) |
commit | 25bec8c8dc0de55694cc573ef6d213ee5babd306 (patch) | |
tree | c5f8d1f6e0e86383ac3965dd886fad713c4fb341 /Modules | |
parent | 099d923344cfcb5e8f414573b11da84904cfb706 (diff) | |
download | cpython-25bec8c8dc0de55694cc573ef6d213ee5babd306.zip cpython-25bec8c8dc0de55694cc573ef6d213ee5babd306.tar.gz cpython-25bec8c8dc0de55694cc573ef6d213ee5babd306.tar.bz2 |
Sometimes, recvfrom() returns an empty address; this is not an error.
Also, get rid of makepair() in favor of mkvalue().
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/socketmodule.c | 36 |
1 files changed, 10 insertions, 26 deletions
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index b1fc81f..839d46e 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -181,28 +181,6 @@ setipaddr(name, addr_ret) } -/* Generally useful convenience function to create a tuple from two - objects. This eats references to the objects; if either is NULL - it destroys the other and returns NULL without raising an exception - (assuming the function that was called to create the argument must - have raised an exception and returned NULL). */ - -static object * -makepair(a, b) - object *a, *b; -{ - object *pair = NULL; - if (a == NULL || b == NULL || (pair = newtupleobject(2)) == NULL) { - XDECREF(a); - XDECREF(b); - return NULL; - } - settupleitem(pair, 0, a); - settupleitem(pair, 1, b); - return pair; -} - - /* Create a string object representing an IP address. This is always a string of the form 'dd.dd.dd.dd' (with variable size numbers). */ @@ -231,13 +209,18 @@ makesockaddr(addr, addrlen) struct sockaddr *addr; int addrlen; { + if (addrlen == 0) { + /* No address -- may be recvfrom() from known socket */ + INCREF(None); + return None; + } + switch (addr->sa_family) { case AF_INET: { struct sockaddr_in *a = (struct sockaddr_in *) addr; - return makepair(makeipaddr(a), - newintobject((long) ntohs(a->sin_port))); + return mkvalue("Oi", makeipaddr(a), ntohs(a->sin_port)); } case AF_UNIX: @@ -251,6 +234,7 @@ makesockaddr(addr, addrlen) default: err_setstr(SocketError, "return unknown socket address type"); return NULL; + } } @@ -365,7 +349,7 @@ sock_accept(s, args) return socket_error(); /* Create the new object with unspecified family, to avoid calls to bind() etc. on it. */ - res = makepair((object *) newsockobject(newfd, + res = mkvalue("OO", (object *) newsockobject(newfd, s->sock_family, s->sock_type, s->sock_proto), @@ -624,7 +608,7 @@ sock_recvfrom(s, args) return socket_error(); if (resizestring(&buf, n) < 0) return NULL; - return makepair(buf, + return mkvalue("OO", buf, makesockaddr((struct sockaddr *)addrbuf, addrlen)); } |