MCPcopy
hub / github.com/shadowsocks/shadowsocks / main

Function main

shadowsocks/server.py:31–139  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

29
30
31def main():
32 shell.check_python()
33
34 config = shell.get_config(False)
35
36 daemon.daemon_exec(config)
37
38 if config['port_password']:
39 if config['password']:
40 logging.warn('warning: port_password should not be used with '
41 'server_port and password. server_port and password '
42 'will be ignored')
43 else:
44 config['port_password'] = {}
45 server_port = config['server_port']
46 if type(server_port) == list:
47 for a_server_port in server_port:
48 config['port_password'][a_server_port] = config['password']
49 else:
50 config['port_password'][str(server_port)] = config['password']
51
52 if config.get('manager_address', 0):
53 logging.info('entering manager mode')
54 manager.run(config)
55 return
56
57 tcp_servers = []
58 udp_servers = []
59
60 if 'dns_server' in config: # allow override settings in resolv.conf
61 dns_resolver = asyncdns.DNSResolver(config['dns_server'],
62 config['prefer_ipv6'])
63 else:
64 dns_resolver = asyncdns.DNSResolver(prefer_ipv6=config['prefer_ipv6'])
65
66 port_password = config['port_password']
67 del config['port_password']
68 for port, password in port_password.items():
69 a_config = config.copy()
70 a_config['server_port'] = int(port)
71 a_config['password'] = password
72 logging.info("starting server at %s:%d" %
73 (a_config['server'], int(port)))
74 tcp_servers.append(tcprelay.TCPRelay(a_config, dns_resolver, False))
75 udp_servers.append(udprelay.UDPRelay(a_config, dns_resolver, False))
76
77 def run_server():
78 def child_handler(signum, _):
79 logging.warn('received SIGQUIT, doing graceful shutting down..')
80 list(map(lambda s: s.close(next_tick=True),
81 tcp_servers + udp_servers))
82 signal.signal(getattr(signal, 'SIGQUIT', signal.SIGTERM),
83 child_handler)
84
85 def int_handler(signum, _):
86 sys.exit(1)
87 signal.signal(signal.SIGINT, int_handler)
88

Callers 1

server.pyFile · 0.70

Calls 5

closeMethod · 0.95
getMethod · 0.80
run_serverFunction · 0.70
runMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected