add udp support but transfer

This commit is contained in:
mengskysama 2014-09-30 10:40:16 +08:00
parent 509ce78e27
commit bb860bb364
3 changed files with 33 additions and 14 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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: