-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathxsocket.py
More file actions
38 lines (33 loc) · 1.05 KB
/
Copy pathxsocket.py
File metadata and controls
38 lines (33 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#coding: utf-8
import gevent
import struct
from gevent import socket
class XSocket(gevent.socket.socket):
def __init__(self, socket = None, addr = None):
if socket is not None:
gevent.socket.socket.__init__(self, _sock = socket)
elif addr is not None:
gevent.socket.socket.__init__(self)
self.connect(addr)
else:
raise Exception("%s.init: bad arguments", self.__class__)
def unpack(self, fmt, length):
data = self.recv(length)
if len(data) < length:
raise Exception("XSocket.unpack: bad formatted stream")
return struct.unpack(fmt, data)
def pack(self, fmt, *args):
data = struct.pack(fmt, *args)
return self.sendall(data)
def forward(self, dest):
try:
while True:
data = self.recv(1400)
if not data:
break
dest.sendall(data)
except socket.error:
pass
finally:
self.close()
dest.close()