[Python-Dev] Re: [Python-checkins] python/dist/src/Modules
socketmodule.c, 1.298, 1.299
Neal Norwitz
neal at metaslash.com
Fri Aug 20 04:09:19 CEST 2004
> Log Message:
> Patch #1003700: Add socketpair function to socket module.
>
> Index: socketmodule.c
> + #ifdef HAVE_SOCKETPAIR
> + /* Create a pair of sockets using the socketpair() function.
> + Arguments as for socket(). */
> +
> + /*ARGSUSED*/
> + static PyObject *
> + socket_socketpair(PyObject *self, PyObject *args)
> + {
> + PySocketSockObject *s0 = NULL, *s1 = NULL;
> + SOCKET_T sv[2];
> + int family, type = SOCK_STREAM, proto = 0;
> + PyObject *res = NULL;
> +
> + #if defined(AF_UNIX)
> + family = AF_UNIX;
> + #else
> + family = AF_INET;
> + #endif
The docstring (below) states the arguments are the same as socket().
However, in sock_initobj() line 2496, the family is initialized to
AF_INET. I think the #if defined(AF_UNIX) code above should be
removed and family should be initialized to AF_INET.
I didn't look to see if the documentation agrees with the docstring.
> + if (!PyArg_ParseTuple(args, "|iii:socketpair",
> + &family, &type, &proto))
> + return NULL;
> + /* Create a pair of socket fds */
> + if (socketpair(family, type, proto, sv) < 0)
> + return set_error();
> + #ifdef SIGPIPE
> + (void) signal(SIGPIPE, SIG_IGN);
> + #endif
I don't think the #ifdef SIGPIPE code is correct. If the user
installed a signal handler calling signal() will remove it. I
think the call to signal() should be removed.
Neal
> + s0 = new_sockobject(sv[0], family, type, proto);
> + if (s0 == NULL)
> + goto finally;
> + s1 = new_sockobject(sv[1], family, type, proto);
> + if (s1 == NULL)
> + goto finally;
> + res = PyTuple_Pack(2, s0, s1);
> +
> + finally:
> + if (res == NULL) {
> + if (s0 == NULL)
> + SOCKETCLOSE(sv[0]);
> + if (s1 == NULL)
> + SOCKETCLOSE(sv[1]);
> + }
> + Py_XDECREF(s0);
> + Py_XDECREF(s1);
> + return res;
> + }
> +
> + PyDoc_STRVAR(socketpair_doc,
> + "socketpair([family[, type[, proto]]]) -> (socket object, socket object)\n\
> + \n\
> + Create a pair of socket objects from the sockets returned by the platform\n\
> + socketpair() function.\n\
> + The arguments are the same as for socket().");
> +
> + #endif /* HAVE_SOCKETPAIR */
More information about the Python-Dev
mailing list