Added flags argument to send and recv variants, for completeness.
This commit is contained in:
@@ -37,15 +37,15 @@ from errno import EWOULDBLOCK, EAGAIN
|
|||||||
__all__ = ['GreenSocket', 'GreenFile', 'GreenPipe']
|
__all__ = ['GreenSocket', 'GreenFile', 'GreenPipe']
|
||||||
|
|
||||||
def higher_order_recv(recv_func):
|
def higher_order_recv(recv_func):
|
||||||
def recv(self, buflen):
|
def recv(self, buflen, flags=0):
|
||||||
if self.act_non_blocking:
|
if self.act_non_blocking:
|
||||||
return self.fd.recv(buflen)
|
return self.fd.recv(buflen, flags)
|
||||||
buf = self.recvbuffer
|
buf = self.recvbuffer
|
||||||
if buf:
|
if buf:
|
||||||
chunk, self.recvbuffer = buf[:buflen], buf[buflen:]
|
chunk, self.recvbuffer = buf[:buflen], buf[buflen:]
|
||||||
return chunk
|
return chunk
|
||||||
fd = self.fd
|
fd = self.fd
|
||||||
bytes = recv_func(fd, buflen)
|
bytes = recv_func(fd, buflen, flags)
|
||||||
if self.gettimeout():
|
if self.gettimeout():
|
||||||
end = time.time()+self.gettimeout()
|
end = time.time()+self.gettimeout()
|
||||||
else:
|
else:
|
||||||
@@ -64,17 +64,17 @@ def higher_order_recv(recv_func):
|
|||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
bytes = recv_func(fd, buflen)
|
bytes = recv_func(fd, buflen, flags)
|
||||||
self.recvcount += len(bytes)
|
self.recvcount += len(bytes)
|
||||||
return bytes
|
return bytes
|
||||||
return recv
|
return recv
|
||||||
|
|
||||||
|
|
||||||
def higher_order_send(send_func):
|
def higher_order_send(send_func):
|
||||||
def send(self, data):
|
def send(self, data, flags=0):
|
||||||
if self.act_non_blocking:
|
if self.act_non_blocking:
|
||||||
return self.fd.send(data)
|
return self.fd.send(data, flags)
|
||||||
count = send_func(self.fd, data)
|
count = send_func(self.fd, data, flags)
|
||||||
if not count:
|
if not count:
|
||||||
return 0
|
return 0
|
||||||
self.sendcount += count
|
self.sendcount += count
|
||||||
@@ -102,9 +102,9 @@ def socket_accept(descriptor):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def socket_send(descriptor, data):
|
def socket_send(descriptor, data, flags=0):
|
||||||
try:
|
try:
|
||||||
return descriptor.send(data)
|
return descriptor.send(data, flags)
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
if e[0] == errno.EWOULDBLOCK or e[0] == errno.ENOTCONN:
|
if e[0] == errno.EWOULDBLOCK or e[0] == errno.ENOTCONN:
|
||||||
return 0
|
return 0
|
||||||
@@ -116,9 +116,9 @@ def socket_send(descriptor, data):
|
|||||||
|
|
||||||
# winsock sometimes throws ENOTCONN
|
# winsock sometimes throws ENOTCONN
|
||||||
SOCKET_CLOSED = (errno.ECONNRESET, errno.ENOTCONN, errno.ESHUTDOWN)
|
SOCKET_CLOSED = (errno.ECONNRESET, errno.ENOTCONN, errno.ESHUTDOWN)
|
||||||
def socket_recv(descriptor, buflen):
|
def socket_recv(descriptor, buflen, flags=0):
|
||||||
try:
|
try:
|
||||||
return descriptor.recv(buflen)
|
return descriptor.recv(buflen, flags)
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
if e[0] == errno.EWOULDBLOCK:
|
if e[0] == errno.EWOULDBLOCK:
|
||||||
return None
|
return None
|
||||||
@@ -135,7 +135,7 @@ def socket_recv(descriptor, buflen):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def file_recv(fd, buflen):
|
def file_recv(fd, buflen, flags=0):
|
||||||
try:
|
try:
|
||||||
return fd.read(buflen)
|
return fd.read(buflen)
|
||||||
except IOError, e:
|
except IOError, e:
|
||||||
@@ -148,7 +148,7 @@ def file_recv(fd, buflen):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def file_send(fd, data):
|
def file_send(fd, data, flags=0):
|
||||||
try:
|
try:
|
||||||
fd.write(data)
|
fd.write(data)
|
||||||
fd.flush()
|
fd.flush()
|
||||||
@@ -338,12 +338,12 @@ class GreenSocket(object):
|
|||||||
|
|
||||||
send = higher_order_send(socket_send)
|
send = higher_order_send(socket_send)
|
||||||
|
|
||||||
def sendall(self, data):
|
def sendall(self, data, flags=0):
|
||||||
fd = self.fd
|
fd = self.fd
|
||||||
tail = self.send(data)
|
tail = self.send(data, flags)
|
||||||
while tail < len(data):
|
while tail < len(data):
|
||||||
trampoline(self.fd, write=True, timeout_exc=socket.timeout)
|
trampoline(self.fd, write=True, timeout_exc=socket.timeout)
|
||||||
tail += self.send(data[tail:])
|
tail += self.send(data[tail:], flags)
|
||||||
|
|
||||||
def sendto(self, *args):
|
def sendto(self, *args):
|
||||||
trampoline(self.fd, write=True, timeout_exc=socket.timeout)
|
trampoline(self.fd, write=True, timeout_exc=socket.timeout)
|
||||||
|
Reference in New Issue
Block a user