def accept(self):
with self.lock:
if self.state.SHUTDOWN:
raise err.Error(errno.ESHUTDOWN)
if not self.state.LISTEN:
self.err("accept() but socket state is {0}".format(self.state))
raise err.Error(errno.EINVAL)
self.recv_buf += 1
try:
rcvd_pdu = super(DataLinkConnection, self).recv()
except IndexError:
raise err.Error(errno.EPIPE)
self.recv_buf -= 1
if rcvd_pdu.name == "CONNECT":
dlc = DataLinkConnection(self.recv_miu, self.recv_win)
dlc.addr = self.addr
dlc.peer = rcvd_pdu.ssap
dlc.send_miu = rcvd_pdu.miu
dlc.send_win = rcvd_pdu.rw
send_pdu = pdu.ConnectionComplete(dlc.peer, dlc.addr)
send_pdu.miu, send_pdu.rw = dlc.recv_miu, dlc.recv_win
log.debug("accepting CONNECT from SAP %d" % dlc.peer)
dlc.state.ESTABLISHED = True
self.send_queue.append(send_pdu)
return dlc
else: # pragma: no cover
raise RuntimeError("CONNECT expected, not " + rcvd_pdu.name)
评论列表
文章目录