add udp support but transfer
This commit is contained in:
parent
509ce78e27
commit
bb860bb364
3 changed files with 33 additions and 14 deletions
|
@ -62,4 +62,4 @@ class LRUCache(collections.MutableMapping):
|
|||
c += 1
|
||||
del self._time_to_keys[least]
|
||||
if c:
|
||||
logging.debug('%d keys swept' % c)
|
||||
logging.debug('%d keys swept' % c)
|
|
@ -48,7 +48,8 @@ class ServerPool(object):
|
|||
self.mgr = asyncmgr.ServerMgr()
|
||||
self.tcp_servers_pool = {}
|
||||
self.tcp_ipv6_servers_pool = {}
|
||||
#self.udp_servers_pool = {}
|
||||
self.udp_servers_pool = {}
|
||||
self.udp_ipv6_servers_pool = {}
|
||||
|
||||
self.loop = eventloop.EventLoop()
|
||||
thread.start_new_thread(ServerPool._loop, (self.loop, self.dns_resolver, self.mgr))
|
||||
|
@ -106,7 +107,9 @@ class ServerPool(object):
|
|||
tcp_server = tcprelay.TCPRelay(a_config, self.dns_resolver, False)
|
||||
tcp_server.add_to_loop(self.loop)
|
||||
self.tcp_servers_pool.update({port: tcp_server})
|
||||
#udp_server = udprelay.UDPRelay(a_config, self.dns_resolver, False)
|
||||
udp_server = udprelay.UDPRelay(a_config, self.dns_resolver, False)
|
||||
udp_server.add_to_loop(self.loop)
|
||||
self.udp_servers_pool.update({port: udp_server})
|
||||
except Exception, e:
|
||||
logging.warn(e)
|
||||
|
||||
|
@ -124,14 +127,16 @@ class ServerPool(object):
|
|||
tcp_server = tcprelay.TCPRelay(a_config, self.dns_resolver, False)
|
||||
tcp_server.add_to_loop(self.loop)
|
||||
self.tcp_ipv6_servers_pool.update({port: tcp_server})
|
||||
#udp_server = udprelay.UDPRelay(a_config, self.dns_resolver, False)
|
||||
udp_server = udprelay.UDPRelay(a_config, self.dns_resolver, False)
|
||||
udp_server.add_to_loop(self.loop)
|
||||
self.udp_ipv6_servers_pool.update({port: udp_server})
|
||||
except Exception, e:
|
||||
logging.warn(e)
|
||||
return True
|
||||
|
||||
def del_server(self, port):
|
||||
port = int(port)
|
||||
logging.info("del server at %d" % int(port))
|
||||
logging.info("del server at %d" % port)
|
||||
try:
|
||||
udpsock = socket(AF_INET, SOCK_DGRAM)
|
||||
udpsock.sendto('%s:%s:0:0' % (Config.MANAGE_PASS, port), (Config.MANAGE_BIND_IP, Config.MANAGE_PORT))
|
||||
|
@ -144,23 +149,26 @@ class ServerPool(object):
|
|||
port = int(port)
|
||||
|
||||
if port not in self.tcp_servers_pool:
|
||||
logging.info("stopped server at %s:%d already stop" % (self.config['server'], int(port)))
|
||||
logging.info("stopped server at %s:%d already stop" % (self.config['server'], port))
|
||||
else:
|
||||
logging.info("stopped server at %s:%d" % (self.config['server'], int(port)))
|
||||
logging.info("stopped server at %s:%d" % (self.config['server'], port))
|
||||
try:
|
||||
self.tcp_servers_pool[int(port)].destroy()
|
||||
del self.tcp_servers_pool[int(port)]
|
||||
#del self.udp_servers_pool[int(port)]
|
||||
self.tcp_servers_pool[port].destroy()
|
||||
del self.tcp_servers_pool[port]
|
||||
self.udp_servers_pool[port].destroy()
|
||||
del self.udp_servers_pool[port]
|
||||
except Exception, e:
|
||||
logging.warn(e)
|
||||
|
||||
if port not in self.tcp_ipv6_servers_pool:
|
||||
logging.info("stopped server at %s:%d already stop" % (self.config['server_ipv6'], int(port)))
|
||||
logging.info("stopped server at %s:%d already stop" % (self.config['server_ipv6'], port))
|
||||
else:
|
||||
logging.info("stopped server at %s:%d" % (self.config['server_ipv6'], int(port)))
|
||||
logging.info("stopped server at %s:%d" % (self.config['server_ipv6'], port))
|
||||
try:
|
||||
self.tcp_ipv6_servers_pool[int(port)].destroy()
|
||||
del self.tcp_ipv6_servers_pool[int(port)]
|
||||
self.tcp_ipv6_servers_pool[port].destroy()
|
||||
del self.tcp_ipv6_servers_pool[port]
|
||||
self.udp_ipv6_servers_pool[port].destroy()
|
||||
del self.udp_ipv6_servers_pool[port]
|
||||
except Exception, e:
|
||||
logging.warn(e)
|
||||
|
||||
|
|
|
@ -249,6 +249,17 @@ class UDPRelay(object):
|
|||
self._eventloop.add(server_socket,
|
||||
eventloop.POLL_IN | eventloop.POLL_ERR)
|
||||
|
||||
def remove_to_loop(self):
|
||||
self._eventloop.remove(self._server_socket)
|
||||
self._eventloop.remove_handler(self._handle_events)
|
||||
|
||||
def destroy(self):
|
||||
#destroy all conn and server conn
|
||||
self.remove_to_loop()
|
||||
self.close()
|
||||
#GC
|
||||
self._cache = None
|
||||
|
||||
def _handle_events(self, events):
|
||||
for sock, fd, event in events:
|
||||
if sock == self._server_socket:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue