def send(self) -> int:
"""Send outgoing data
"""
with self._write_lock:
while len(self.outbuffer) > 0:
try:
sent = self.sock.send(self.outbuffer)
self.outbuffer = self.outbuffer[sent:]
except socket.error as error:
if error.args[0] == errno.EAGAIN:
time.sleep(0.1)
elif error.args[0] in (
errno.ECONNRESET, errno.ENOTCONN, errno.ESHUTDOWN,
errno.ECONNABORTED, errno.EPIPE
):
self.close()
return 0
elif os.name == 'posix':
# Windows doesn't seems to have EBADFD
if sys.platform == 'darwin':
# OS X uses EBADF as EBADFD. why? no idea asks Tim
if error.args[0] == errno.EBADF:
self.close()
return 0
else:
if error.args[0] == errno.EBADFD:
self.close()
return 0
raise
else:
raise
评论列表
文章目录