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
|
c += 1
|
||||||
del self._time_to_keys[least]
|
del self._time_to_keys[least]
|
||||||
if c:
|
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.mgr = asyncmgr.ServerMgr()
|
||||||
self.tcp_servers_pool = {}
|
self.tcp_servers_pool = {}
|
||||||
self.tcp_ipv6_servers_pool = {}
|
self.tcp_ipv6_servers_pool = {}
|
||||||
#self.udp_servers_pool = {}
|
self.udp_servers_pool = {}
|
||||||
|
self.udp_ipv6_servers_pool = {}
|
||||||
|
|
||||||
self.loop = eventloop.EventLoop()
|
self.loop = eventloop.EventLoop()
|
||||||
thread.start_new_thread(ServerPool._loop, (self.loop, self.dns_resolver, self.mgr))
|
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 = tcprelay.TCPRelay(a_config, self.dns_resolver, False)
|
||||||
tcp_server.add_to_loop(self.loop)
|
tcp_server.add_to_loop(self.loop)
|
||||||
self.tcp_servers_pool.update({port: tcp_server})
|
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:
|
except Exception, e:
|
||||||
logging.warn(e)
|
logging.warn(e)
|
||||||
|
|
||||||
|
@ -124,14 +127,16 @@ class ServerPool(object):
|
||||||
tcp_server = tcprelay.TCPRelay(a_config, self.dns_resolver, False)
|
tcp_server = tcprelay.TCPRelay(a_config, self.dns_resolver, False)
|
||||||
tcp_server.add_to_loop(self.loop)
|
tcp_server.add_to_loop(self.loop)
|
||||||
self.tcp_ipv6_servers_pool.update({port: tcp_server})
|
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:
|
except Exception, e:
|
||||||
logging.warn(e)
|
logging.warn(e)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def del_server(self, port):
|
def del_server(self, port):
|
||||||
port = int(port)
|
port = int(port)
|
||||||
logging.info("del server at %d" % int(port))
|
logging.info("del server at %d" % port)
|
||||||
try:
|
try:
|
||||||
udpsock = socket(AF_INET, SOCK_DGRAM)
|
udpsock = socket(AF_INET, SOCK_DGRAM)
|
||||||
udpsock.sendto('%s:%s:0:0' % (Config.MANAGE_PASS, port), (Config.MANAGE_BIND_IP, Config.MANAGE_PORT))
|
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)
|
port = int(port)
|
||||||
|
|
||||||
if port not in self.tcp_servers_pool:
|
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:
|
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:
|
try:
|
||||||
self.tcp_servers_pool[int(port)].destroy()
|
self.tcp_servers_pool[port].destroy()
|
||||||
del self.tcp_servers_pool[int(port)]
|
del self.tcp_servers_pool[port]
|
||||||
#del self.udp_servers_pool[int(port)]
|
self.udp_servers_pool[port].destroy()
|
||||||
|
del self.udp_servers_pool[port]
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
logging.warn(e)
|
logging.warn(e)
|
||||||
|
|
||||||
if port not in self.tcp_ipv6_servers_pool:
|
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:
|
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:
|
try:
|
||||||
self.tcp_ipv6_servers_pool[int(port)].destroy()
|
self.tcp_ipv6_servers_pool[port].destroy()
|
||||||
del self.tcp_ipv6_servers_pool[int(port)]
|
del self.tcp_ipv6_servers_pool[port]
|
||||||
|
self.udp_ipv6_servers_pool[port].destroy()
|
||||||
|
del self.udp_ipv6_servers_pool[port]
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
logging.warn(e)
|
logging.warn(e)
|
||||||
|
|
||||||
|
|
|
@ -249,6 +249,17 @@ class UDPRelay(object):
|
||||||
self._eventloop.add(server_socket,
|
self._eventloop.add(server_socket,
|
||||||
eventloop.POLL_IN | eventloop.POLL_ERR)
|
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):
|
def _handle_events(self, events):
|
||||||
for sock, fd, event in events:
|
for sock, fd, event in events:
|
||||||
if sock == self._server_socket:
|
if sock == self._server_socket:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue