accept4() was added for atomicity (O_CLOEXEC), not performance.
For pipe2() vs pipe(), this could make a measurable difference because the base syscall is so fast, but for accept(), which is a blocking syscall, shaving one or two syscalls are unlikely to yield any performance gain.

IMO that's not a reason good enough to make accept() signature more complex.


2014-03-07 11:14 GMT+00:00 Saúl Ibarra Corretgé <>:
On 03/07/2014 11:40 AM, Antoine Pitrou wrote:
On Fri, 07 Mar 2014 10:37:58 +0100
Saúl Ibarra Corretgé <>

accept4 allows us to do this with a single syscall, and it made it into
FreeBSD 10, so that's another system that could benefit from this

If it doesn't, then perhaps the configure script needs to be fixed.

Probably not, I'll have a look.

The idea is to accept an incoming connection and make it non-blocking at
the same time, asyncio and other frameworks would benefit from this by
doing one function call and 2 syscalls less (on supported systems, that is).

That's not likely to do a significant difference (benchmarks welcome).

Actually, after it's 2 function calls (accept + set_blocking)+ 2 syscalls (accept + ioctl FIONBIO) vs 1 function call (accept) + 1 syscall (accept4).

Saúl Ibarra Corretgé
Python-ideas mailing list
Code of Conduct: