blob: 42ef5789c055a8b497aa12ecee54c45b812bcf58 [file] [log] [blame]
Mark Sleecde2b612006-09-03 21:13:07 +00001from TTransport import *
2import socket
3
4class TSocket(TTransportBase):
5
6 """Socket implementation of TTransport base."""
7
Mark Sleec9676562006-09-05 17:34:52 +00008 def __init__(self, host='localhost', port=9090):
Mark Sleecde2b612006-09-03 21:13:07 +00009 self.host = host
10 self.port = port
11 self.handle = None
12
Mark Slee4f0fed62006-10-02 17:50:08 +000013 def setHandle(self, h):
Mark Sleec9676562006-09-05 17:34:52 +000014 self.handle = h
15
Mark Sleecde2b612006-09-03 21:13:07 +000016 def isOpen(self):
17 return handle != None
18
19 def open(self):
20 self.handle = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
21 self.handle.connect((self.host, self.port))
22
23 def close(self):
Mark Sleed788b2e2006-09-07 01:26:35 +000024 if self.handle != None:
25 self.handle.close()
26 self.handle = None
Mark Sleecde2b612006-09-03 21:13:07 +000027
Mark Sleecde2b612006-09-03 21:13:07 +000028 def read(self, sz):
29 buff = self.handle.recv(sz)
Mark Sleec9676562006-09-05 17:34:52 +000030 if len(buff) == 0:
Mark Slee4f0fed62006-10-02 17:50:08 +000031 raise TTransportException('TSocket read 0 bytes')
Mark Sleecde2b612006-09-03 21:13:07 +000032 return buff
33
34 def write(self, buff):
Mark Sleec9676562006-09-05 17:34:52 +000035 sent = 0
36 have = len(buff)
37 while sent < have:
38 plus = self.handle.send(buff)
39 if plus == 0:
Mark Slee4f0fed62006-10-02 17:50:08 +000040 raise TTransportException('sent 0 bytes')
Mark Sleec9676562006-09-05 17:34:52 +000041 sent += plus
42 buff = buff[plus:]
Mark Sleecde2b612006-09-03 21:13:07 +000043
44 def flush(self):
45 pass
Mark Sleec9676562006-09-05 17:34:52 +000046
47class TServerSocket(TServerTransportBase):
48
49 """Socket implementation of TServerTransport base."""
50
51 def __init__(self, port):
52 self.port = port
53 self.handle = None
54
55 def listen(self):
56 self.handle = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Mark Slee4f0fed62006-10-02 17:50:08 +000057 self.handle.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
58 if hasattr(self.handle, 'set_timeout'):
59 self.handle.set_timeout(None)
Mark Sleec9676562006-09-05 17:34:52 +000060 self.handle.bind(('', self.port))
61 self.handle.listen(128)
62
63 def accept(self):
64 (client, addr) = self.handle.accept()
65 result = TSocket()
Mark Slee4f0fed62006-10-02 17:50:08 +000066 result.setHandle(client)
Mark Sleec9676562006-09-05 17:34:52 +000067 return result
68
69 def close(self):
70 self.handle.close()
71 self.handle = None