[issue10115] Support accept4() for atomic setting of flags at socket creation

Charles-François Natali report at bugs.python.org
Mon Jun 6 20:56:31 CEST 2011


Charles-François Natali <neologix at free.fr> added the comment:

@nvetoshkin
Could you update your patch against py3k?

I've got a couple comments (can't login to Rietveld, it's probably due to the change of my tracker account name):

if(flags & ~(SOCK_NONBLOCK | SOCK_CLOEXEC)) {
    PyErr_SetString(PyExc_ValueError,
        "Wrong flag value");
    return NULL;
}

I'm not sure that's necessary:
- accept4() can sanitize its input itself if necessary (will fail with EINVAL)
- if some flag is added, or another OS doesn't use the same flags, it'll fall out of sync


#ifdef HAVE_ACCEPT4
         /* These flags are not inherited after accept */
         type &= ~(SOCK_NONBLOCK & SOCK_CLOEXEC);
#endif /* HAVE_ACCEPT4 */

SOCK_NONBLOCK & SOCK_CLOEXEC == 0, so this doesn't do much.
Second, you should probably reuse what's done in Lib/socket.py for timeout inheritance upon accept (except that here you certainly don't want to set the socket to blocking if SOCK_NONBLOCK flag is passed).

You should add a test for that: have a look at test_pipe2 in Lib/test/test_posix.py.

----------

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue10115>
_______________________________________


More information about the Python-bugs-list mailing list