mirror of
https://github.com/YunoHost-Apps/seafile_ynh.git
synced 2024-09-03 20:26:01 +02:00
42 lines
No EOL
1 KiB
Python
42 lines
No EOL
1 KiB
Python
import sys
|
|
import socket
|
|
|
|
from ccnet.errors import NetworkError
|
|
|
|
def recvall(fd, total):
|
|
remain = total
|
|
data = ''
|
|
while remain > 0:
|
|
try:
|
|
new = fd.recv(remain)
|
|
except socket.error as e:
|
|
raise NetworkError('Failed to read from socket: %s' % e)
|
|
|
|
n = len(new)
|
|
if n <= 0:
|
|
raise NetworkError("Failed to read from socket")
|
|
else:
|
|
data += new
|
|
remain -= n
|
|
|
|
return data
|
|
|
|
def sendall(fd, data):
|
|
total = len(data)
|
|
offset = 0
|
|
while offset < total:
|
|
try:
|
|
n = fd.send(data[offset:])
|
|
except socket.error as e:
|
|
raise NetworkError('Failed to write to socket: %s' % e)
|
|
|
|
if n <= 0:
|
|
raise NetworkError('Failed to write to socket')
|
|
else:
|
|
offset += n
|
|
|
|
def make_socket_closeonexec(fd):
|
|
if 'win32' not in sys.platform:
|
|
import fcntl
|
|
old_flags = fcntl.fcntl(fd, fcntl.F_GETFD)
|
|
fcntl.fcntl(fd, fcntl.F_SETFD, old_flags | fcntl.FD_CLOEXEC) |