common.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:pyNgrok 作者: aaronsh 项目源码 文件源码
def run(self):
        if self.sck_side_A is not None and self.sck_side_B is not None:
            logger = logging.getLogger("logger")
            logger.info("%s start"%self.getName())
            set_sock_buff_size(self.sck_side_A)
            set_sock_buff_size(self.sck_side_B)
            #send cached data
            if self.cached_data_from_A:
                self.send_all(self.sck_side_B, self.cached_data_from_A)
            if self.cached_data_from_B:
                self.send_all(self.sck_side_A, self.cached_data_from_B)
            scks = (self.sck_side_A, self.sck_side_B)
            while self.forwarding:
                try:
                    readable,writeable,exceptional = select.select(scks,[],scks, 1)
                    for s in readable:
                        data = recv(s, BUFFER_SIZE)
                        if len(data):
                            if s == self.sck_side_A:
                                #self.sck_side_B.sendall(data)
                                self.send_all(self.sck_side_B, data)
                            else:
                                #self.sck_side_A.sendall(data)
                                self.send_all(self.sck_side_A, data)
                        else:
                            # remote closed
                            self.forwarding = False
                            break
                    for s in exceptional:
                        socket.getpeername()
                        peer_addr, peer_port = s.getpeername()
                        local_addr, local_port = s.getsockname(self)
                        logger.error("socket in exceptional %s:%d->%s:%d"%(local_addr, local_port, peer_addr, peer_port))
                        self.forwarding = False
                        break
                except socket.error,e:
                    logger.error(traceback.format_exc())
                    self.forwarding = False
                except Exception, e:
                    logger.error(traceback.format_exc())
                    self.forwarding = False
        if self.sck_side_A is not None:
            safe_close_socket(self.sck_side_A)
        if self.sck_side_B is not None:
            safe_close_socket(self.sck_side_B)
        logger.info("%s end"%self.getName())
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号