Use O_NONBLOCK rather than O_NDELAY, so we get POSIX non-blocking I/O.

On HPUX, Solaris, Tru64 (Dec UNIX), and IRIX (I think),
O_NONBLOCK is the POSIX version of non-blocking I/O
which is what we want.

On Linux and FreeBSD (at least), O_NONBLOCK and O_NDELAY are the same.
So this change should have no negative effect on those platforms.

Tested on Linux, Solaris, HPUX.

Thanks to Anders Qvist for diagnosing this problem.
This commit is contained in:
Neal Norwitz 2002-11-02 19:55:21 +00:00
parent e7629c85bc
commit 39d22e5693
1 changed files with 4 additions and 4 deletions

View File

@ -211,8 +211,8 @@ int h_errno; /* not used */
# define offsetof(type, member) ((size_t)(&((type *)0)->member))
#endif
#ifndef O_NDELAY
# define O_NDELAY O_NONBLOCK /* For QNX only? */
#ifndef O_NONBLOCK
# define O_NONBLOCK O_NDELAY
#endif
#include "addrinfo.h"
@ -488,9 +488,9 @@ internal_setblocking(PySocketSockObject *s, int block)
#else /* !PYOS_OS2 */
delay_flag = fcntl(s->sock_fd, F_GETFL, 0);
if (block)
delay_flag &= (~O_NDELAY);
delay_flag &= (~O_NONBLOCK);
else
delay_flag |= O_NDELAY;
delay_flag |= O_NONBLOCK;
fcntl(s->sock_fd, F_SETFL, delay_flag);
#endif /* !PYOS_OS2 */
#else /* MS_WINDOWS */