1 "Socket wrapper for BeOS, which does not support dup()."
3 # (And hence, fromfd() and makefile() are unimplemented in C....)
5 # XXX Living dangerously here -- close() is implemented by deleting a
6 # reference. Thus we rely on the real _socket module to close on
7 # deallocation, and also hope that nobody keeps a reference to our _sock
17 _realsocketcall
= socket
20 def socket(family
, type, proto
=0):
21 return _socketobject(_realsocketcall(family
, type, proto
))
26 def __init__(self
, sock
):
36 sock
, addr
= self
._sock
.accept()
37 return _socketobject(sock
), addr
40 return _socketobject(self
._sock
)
42 def makefile(self
, mode
='r', bufsize
=-1):
43 return _fileobject(self
._sock
, mode
, bufsize
)
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',
57 def __init__(self
, sock
, mode
, bufsize
):
62 self
._rbufsize
= max(1, bufsize
)
63 self
._wbufsize
= bufsize
64 self
._wbuf
= self
._rbuf
= ""
78 self
._sock
.send(self
._wbuf
)
82 return self
._sock
.fileno()
84 def write(self
, data
):
85 self
._wbuf
= self
._wbuf
+ data
86 if self
._wbufsize
== 1:
90 if len(self
._wbuf
) >= self
._wbufsize
:
93 def writelines(self
, list):
94 filter(self
._sock
.send
, list)
99 while len(self
._rbuf
) < n
:
100 new
= self
._sock
.recv(self
._rbufsize
)
102 self
._rbuf
= self
._rbuf
+ new
103 data
, self
._rbuf
= self
._rbuf
[:n
], self
._rbuf
[n
:]
106 new
= self
._sock
.recv(self
._rbufsize
)
108 self
._rbuf
= self
._rbuf
+ new
109 data
, self
._rbuf
= self
._rbuf
, ""
115 i
= string
.find(self
._rbuf
, '\n')
117 new
= self
._sock
.recv(self
._rbufsize
)
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
)
124 data
, self
._rbuf
= self
._rbuf
[:i
], self
._rbuf
[i
:]
130 line
= self
.readline()