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:
parent
e7629c85bc
commit
39d22e5693
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue