|
10 | 10 |
|
11 | 11 |
|
12 | 12 | try: |
13 | | - from _socket import * |
| 13 | + from _socket import * |
14 | 14 | except ImportError: |
15 | | - from socket import * |
| 15 | + from socket import * |
16 | 16 |
|
17 | 17 | _realsocketcall = socket |
18 | 18 |
|
19 | 19 |
|
20 | 20 | def socket(family, type, proto=0): |
21 | | - return _socketobject(_realsocketcall(family, type, proto)) |
| 21 | + return _socketobject(_realsocketcall(family, type, proto)) |
22 | 22 |
|
23 | 23 |
|
24 | 24 | class _socketobject: |
25 | 25 |
|
26 | | - def __init__(self, sock): |
27 | | - self._sock = sock |
| 26 | + def __init__(self, sock): |
| 27 | + self._sock = sock |
28 | 28 |
|
29 | | - def close(self): |
30 | | - self._sock = 0 |
| 29 | + def close(self): |
| 30 | + self._sock = 0 |
31 | 31 |
|
32 | | - def __del__(self): |
33 | | - self.close() |
| 32 | + def __del__(self): |
| 33 | + self.close() |
34 | 34 |
|
35 | | - def accept(self): |
36 | | - sock, addr = self._sock.accept() |
37 | | - return _socketobject(sock), addr |
| 35 | + def accept(self): |
| 36 | + sock, addr = self._sock.accept() |
| 37 | + return _socketobject(sock), addr |
38 | 38 |
|
39 | | - def dup(self): |
40 | | - return _socketobject(self._sock) |
| 39 | + def dup(self): |
| 40 | + return _socketobject(self._sock) |
41 | 41 |
|
42 | | - def makefile(self, mode='r', bufsize=-1): |
43 | | - return _fileobject(self._sock, mode, bufsize) |
| 42 | + def makefile(self, mode='r', bufsize=-1): |
| 43 | + return _fileobject(self._sock, mode, bufsize) |
44 | 44 |
|
45 | | - _s = "def %s(self, *args): return apply(self._sock.%s, args)\n\n" |
46 | | - for _m in ('bind', 'connect', 'fileno', 'listen', |
47 | | - 'getpeername', 'getsockname', |
48 | | - 'getsockopt', 'setsockopt', |
49 | | - 'recv', 'recvfrom', 'send', 'sendto', |
50 | | - 'setblocking', |
51 | | - 'shutdown'): |
52 | | - exec _s % (_m, _m) |
| 45 | + _s = "def %s(self, *args): return apply(self._sock.%s, args)\n\n" |
| 46 | + for _m in ('bind', 'connect', 'fileno', 'listen', |
| 47 | + 'getpeername', 'getsockname', |
| 48 | + 'getsockopt', 'setsockopt', |
| 49 | + 'recv', 'recvfrom', 'send', 'sendto', |
| 50 | + 'setblocking', |
| 51 | + 'shutdown'): |
| 52 | + exec _s % (_m, _m) |
53 | 53 |
|
54 | 54 |
|
55 | 55 | class _fileobject: |
56 | 56 |
|
57 | | - def __init__(self, sock, mode, bufsize): |
58 | | - self._sock = sock |
59 | | - self._mode = mode |
60 | | - if bufsize < 0: |
61 | | - bufsize = 512 |
62 | | - self._rbufsize = max(1, bufsize) |
63 | | - self._wbufsize = bufsize |
64 | | - self._wbuf = self._rbuf = "" |
65 | | - |
66 | | - def close(self): |
67 | | - try: |
68 | | - if self._sock: |
| 57 | + def __init__(self, sock, mode, bufsize): |
| 58 | + self._sock = sock |
| 59 | + self._mode = mode |
| 60 | + if bufsize < 0: |
| 61 | + bufsize = 512 |
| 62 | + self._rbufsize = max(1, bufsize) |
| 63 | + self._wbufsize = bufsize |
| 64 | + self._wbuf = self._rbuf = "" |
| 65 | + |
| 66 | + def close(self): |
| 67 | + try: |
| 68 | + if self._sock: |
| 69 | + self.flush() |
| 70 | + finally: |
| 71 | + self._sock = 0 |
| 72 | + |
| 73 | + def __del__(self): |
| 74 | + self.close() |
| 75 | + |
| 76 | + def flush(self): |
| 77 | + if self._wbuf: |
| 78 | + self._sock.send(self._wbuf) |
| 79 | + self._wbuf = "" |
| 80 | + |
| 81 | + def fileno(self): |
| 82 | + return self._sock.fileno() |
| 83 | + |
| 84 | + def write(self, data): |
| 85 | + self._wbuf = self._wbuf + data |
| 86 | + if self._wbufsize == 1: |
| 87 | + if '\n' in data: |
| 88 | + self.flush() |
| 89 | + else: |
| 90 | + if len(self._wbuf) >= self._wbufsize: |
| 91 | + self.flush() |
| 92 | + |
| 93 | + def writelines(self, list): |
| 94 | + filter(self._sock.send, list) |
69 | 95 | self.flush() |
70 | | - finally: |
71 | | - self._sock = 0 |
72 | 96 |
|
73 | | - def __del__(self): |
74 | | - self.close() |
75 | | - |
76 | | - def flush(self): |
77 | | - if self._wbuf: |
78 | | - self._sock.send(self._wbuf) |
79 | | - self._wbuf = "" |
80 | | - |
81 | | - def fileno(self): |
82 | | - return self._sock.fileno() |
83 | | - |
84 | | - def write(self, data): |
85 | | - self._wbuf = self._wbuf + data |
86 | | - if self._wbufsize == 1: |
87 | | - if '\n' in data: |
88 | | - self.flush() |
89 | | - else: |
90 | | - if len(self._wbuf) >= self._wbufsize: |
91 | | - self.flush() |
92 | | - |
93 | | - def writelines(self, list): |
94 | | - filter(self._sock.send, list) |
95 | | - self.flush() |
96 | | - |
97 | | - def read(self, n=-1): |
98 | | - if n >= 0: |
99 | | - while len(self._rbuf) < n: |
100 | | - new = self._sock.recv(self._rbufsize) |
101 | | - if not new: break |
102 | | - self._rbuf = self._rbuf + new |
103 | | - data, self._rbuf = self._rbuf[:n], self._rbuf[n:] |
104 | | - return data |
105 | | - while 1: |
106 | | - new = self._sock.recv(self._rbufsize) |
107 | | - if not new: break |
108 | | - self._rbuf = self._rbuf + new |
109 | | - data, self._rbuf = self._rbuf, "" |
110 | | - return data |
111 | | - |
112 | | - def readline(self): |
113 | | - import string |
114 | | - data = "" |
115 | | - i = string.find(self._rbuf, '\n') |
116 | | - while i < 0: |
117 | | - new = self._sock.recv(self._rbufsize) |
118 | | - if not new: break |
119 | | - i = string.find(new, '\n') |
120 | | - if i >= 0: i = i + len(self._rbuf) |
121 | | - self._rbuf = self._rbuf + new |
122 | | - if i < 0: i = len(self._rbuf) |
123 | | - else: i = i+1 |
124 | | - data, self._rbuf = self._rbuf[:i], self._rbuf[i:] |
125 | | - return data |
126 | | - |
127 | | - def readlines(self): |
128 | | - list = [] |
129 | | - while 1: |
130 | | - line = self.readline() |
131 | | - if not line: break |
132 | | - list.append(line) |
133 | | - return list |
| 97 | + def read(self, n=-1): |
| 98 | + if n >= 0: |
| 99 | + while len(self._rbuf) < n: |
| 100 | + new = self._sock.recv(self._rbufsize) |
| 101 | + if not new: break |
| 102 | + self._rbuf = self._rbuf + new |
| 103 | + data, self._rbuf = self._rbuf[:n], self._rbuf[n:] |
| 104 | + return data |
| 105 | + while 1: |
| 106 | + new = self._sock.recv(self._rbufsize) |
| 107 | + if not new: break |
| 108 | + self._rbuf = self._rbuf + new |
| 109 | + data, self._rbuf = self._rbuf, "" |
| 110 | + return data |
| 111 | + |
| 112 | + def readline(self): |
| 113 | + import string |
| 114 | + data = "" |
| 115 | + i = string.find(self._rbuf, '\n') |
| 116 | + while i < 0: |
| 117 | + new = self._sock.recv(self._rbufsize) |
| 118 | + if not new: break |
| 119 | + i = string.find(new, '\n') |
| 120 | + if i >= 0: i = i + len(self._rbuf) |
| 121 | + self._rbuf = self._rbuf + new |
| 122 | + if i < 0: i = len(self._rbuf) |
| 123 | + else: i = i+1 |
| 124 | + data, self._rbuf = self._rbuf[:i], self._rbuf[i:] |
| 125 | + return data |
| 126 | + |
| 127 | + def readlines(self): |
| 128 | + list = [] |
| 129 | + while 1: |
| 130 | + line = self.readline() |
| 131 | + if not line: break |
| 132 | + list.append(line) |
| 133 | + return list |
0 commit comments