Skip EINTR errors on raw sockets
This commit is contained in:
parent
baf9aaf26c
commit
1776e2edcc
@ -13,6 +13,7 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from socket import _fileobject
|
from socket import _fileobject
|
||||||
|
import errno
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
|
|
||||||
@ -29,7 +30,13 @@ class FileSocket(_fileobject):
|
|||||||
"""Read data from the socket as if it were a file."""
|
"""Read data from the socket as if it were a file."""
|
||||||
if self._sock is None:
|
if self._sock is None:
|
||||||
return None
|
return None
|
||||||
data = self._sock.recv(size)
|
while True:
|
||||||
|
try:
|
||||||
|
data = self._sock.recv(size)
|
||||||
|
break
|
||||||
|
except socket.error as serr:
|
||||||
|
if serr.errno != errno.EINTR:
|
||||||
|
raise
|
||||||
if data is not None:
|
if data is not None:
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
@ -1294,6 +1294,9 @@ class XMLStream(object):
|
|||||||
try:
|
try:
|
||||||
sent += self.socket.send(data[sent:])
|
sent += self.socket.send(data[sent:])
|
||||||
count += 1
|
count += 1
|
||||||
|
except Socket.error as serr:
|
||||||
|
if serr.errno != errno.EINTR:
|
||||||
|
raise
|
||||||
except ssl.SSLError as serr:
|
except ssl.SSLError as serr:
|
||||||
if tries >= self.ssl_retry_max:
|
if tries >= self.ssl_retry_max:
|
||||||
log.debug('SSL error: max retries reached')
|
log.debug('SSL error: max retries reached')
|
||||||
@ -1715,6 +1718,9 @@ class XMLStream(object):
|
|||||||
try:
|
try:
|
||||||
sent += self.socket.send(enc_data[sent:])
|
sent += self.socket.send(enc_data[sent:])
|
||||||
count += 1
|
count += 1
|
||||||
|
except Socket.error as serr:
|
||||||
|
if serr.errno != errno.EINTR:
|
||||||
|
raise
|
||||||
except ssl.SSLError as serr:
|
except ssl.SSLError as serr:
|
||||||
if tries >= self.ssl_retry_max:
|
if tries >= self.ssl_retry_max:
|
||||||
log.debug('SSL error: max retries reached')
|
log.debug('SSL error: max retries reached')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user