mirror of
https://github.com/python/cpython.git
synced 2025-10-17 12:18:23 +00:00
Issue #22054: Add os.get_blocking() and os.set_blocking() functions to get and
set the blocking mode of a file descriptor (False if the O_NONBLOCK flag is set, True otherwise). These functions are not available on Windows.
This commit is contained in:
parent
6aa4269ed2
commit
1db9e7bb19
13 changed files with 198 additions and 58 deletions
|
@ -1,7 +1,6 @@
|
|||
from test.support import verbose, run_unittest, import_module, reap_children
|
||||
|
||||
#Skip these tests if either fcntl or termios is not available
|
||||
fcntl = import_module('fcntl')
|
||||
# Skip these tests if termios is not available
|
||||
import_module('termios')
|
||||
|
||||
import errno
|
||||
|
@ -84,16 +83,18 @@ class PtyTest(unittest.TestCase):
|
|||
# in master_open(), we need to read the EOF.
|
||||
|
||||
# Ensure the fd is non-blocking in case there's nothing to read.
|
||||
orig_flags = fcntl.fcntl(master_fd, fcntl.F_GETFL)
|
||||
fcntl.fcntl(master_fd, fcntl.F_SETFL, orig_flags | os.O_NONBLOCK)
|
||||
blocking = os.get_blocking(master_fd)
|
||||
try:
|
||||
s1 = os.read(master_fd, 1024)
|
||||
self.assertEqual(b'', s1)
|
||||
except OSError as e:
|
||||
if e.errno != errno.EAGAIN:
|
||||
raise
|
||||
# Restore the original flags.
|
||||
fcntl.fcntl(master_fd, fcntl.F_SETFL, orig_flags)
|
||||
os.set_blocking(master_fd, False)
|
||||
try:
|
||||
s1 = os.read(master_fd, 1024)
|
||||
self.assertEqual(b'', s1)
|
||||
except OSError as e:
|
||||
if e.errno != errno.EAGAIN:
|
||||
raise
|
||||
finally:
|
||||
# Restore the original flags.
|
||||
os.set_blocking(master_fd, blocking)
|
||||
|
||||
debug("Writing to slave_fd")
|
||||
os.write(slave_fd, TEST_STRING_1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue