コード例 #1
0
def serv_start(handle):
    global socket, server, cache
    mode = config['mode']
    if mode == 'gevent':
        global geventsocks
        from gevent.server import DatagramServer
        from gevent import socket
        import geventsocks
        geventsocks.set_default_proxy(config['socks5_ip'],
                                      config['socks5_port'])
        server = DatagramServer((config['listen_ip'], config['listen_port']),
                                handle)
        cache = {}
        return server.serve_forever()

    elif mode == 'multiprocessing':
        global socks
        import socket
        import multiprocessing
        import socks
        socks.set_default_proxy(socks.SOCKS5, config['socks5_ip'],
                                config['socks5_port'])
        server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        server.bind((config['listen_ip'], config['listen_port']))
        cache = multiprocessing.Manager().dict()
        pool = multiprocessing.Pool(config['the_num_of_processes'])
        while True:
            data, cli_addr = server.recvfrom(512)
            pool.apply_async(handle, args=(
                data,
                cli_addr,
            ))