accept4.c should define __accept4, move the accept.c guts there, accept should just call __accept4 with 0 flags.
CLOEXEC is purely in libc, just pass O_CLOEXEC to _hurd_intern_fd. O_NONBLOCK can be set normally (io_set_openmodes) on the socket before installing it in the fd. That is the intent: that at no time does the fd exist but without O_NONBLOCK set. The whole body should indeed be inside HURD_CRITICAL_BEGIN anyway. But that's just for signal safety. It doesn't have anything to do with a window without O_NONBLOCK, since that window would be for the port that is not yet installed into an fd. Thanks, Roland