def main(self):
if self._is_sink() or self._is_source():
raise Exception('This ability must be connected through pipes to other abilities!')
if self.protocol == 'IPv4':
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
else:
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
s.bind(('' if isinstance(self.ip_src, type(None)) else self.ip_src, self.port_src))
s.settimeout(self.timeout)
s.connect((self.ip_dst, self.port_dst))
stop_evt = threading.Event()
out_thr = threading.Thread(target=self._forward_outgoing, args=(s, stop_evt, self._poll, self._recv))
out_thr.start()
in_thr = threading.Thread(target=self._forward_incoming, args=(s, stop_evt, self._send, self.stop))
in_thr.start()
self._wait()
stop_evt.set()
out_thr.join()
in_thr.join()
s.close()
评论列表
文章目录