1
2 '''
3 Default included Raw publishers.
4
5 @author: Adam Cecchetti
6 @version: $Id: raw.py 795 2008-03-25 05:34:00Z meddingt $
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 import socket, time, sys
37 from Peach.publisher import Publisher
38
39
40
41 -class Raw(Publisher):
42 '''
43 A simple Raw publisher.
44 '''
45
46 _host = None
47 _socket = None
48
49 - def __init__(self, interface, timeout = 0.1):
50 '''
51 @type host: string
52 @param host: Remote host
53 @type timeout: number
54 @param timeout: How long to wait for reponse
55 '''
56 self._interface = interface
57 self._timeout = float(timeout)
58
60 '''
61 Create connection.
62 '''
63 pass
64
66 '''
67 Close connection if open.
68 '''
69 self.close()
70
77
82
83 - def send(self, data):
84 '''
85 Send data via sendall.
86
87 @type data: string
88 @param data: Data to send
89 '''
90 self._socket.sendall(data)
91
93 '''
94 Receive upto 10000 bytes of data.
95
96 @rtype: string
97 @return: received data.
98 '''
99
100 if size != None:
101 return self._socket.recv(size)
102
103 else:
104 self._socket.setblocking(0)
105
106 timeout = self._timeout
107 beginTime = time.time()
108 ret = ''
109
110 try:
111 while True:
112 if len(ret) > 0 or time.time() - beginTime > timeout:
113 break
114
115 try:
116 ret += self._socket.recv(10000)
117 except socket.error, e:
118 if str(e).find('The socket operation could not complete without blocking') == -1:
119 raise
120
121 except socket.error, e:
122 print "Socket:Receive(): Caught socket.error [%s]" % e
123
124 self._socket.setblocking(1)
125 return ret
126
127
128