Handle blocking io errors when writing all to an fd

This commit is contained in:
Kovid Goyal 2021-11-17 11:45:15 +05:30
parent 18ed56b639
commit e68debc94e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -430,11 +430,16 @@ def parse_address_spec(spec: str) -> Tuple[AddressFamily, Union[Tuple[str, int],
return family, address, socket_path
def write_all(fd: int, data: Union[str, bytes]) -> None:
def write_all(fd: int, data: Union[str, bytes], block_until_written: bool = True) -> None:
if isinstance(data, str):
data = data.encode('utf-8')
while data:
n = os.write(fd, data)
try:
n = os.write(fd, data)
except BlockingIOError:
if not block_until_written:
raise
continue
if not n:
break
data = data[n:]