• zhenwei pi's avatar
    Introduce .listen into connection type · 0b27cfe3
    zhenwei pi authored
    
    
    Introduce listen method into connection type, this allows no hard code
    of listen logic. Originally, we initialize server during startup like
    this:
        if (server.port)
            listenToPort(server.port,&server.ipfd);
        if (server.tls_port)
            listenToPort(server.port,&server.tlsfd);
        if (server.unixsocket)
            anetUnixServer(...server.unixsocket...);
    
        ...
        if (createSocketAcceptHandler(&server.ipfd, acceptTcpHandler) != C_OK)
        if (createSocketAcceptHandler(&server.tlsfd, acceptTcpHandler) != C_OK)
        if (createSocketAcceptHandler(&server.sofd, acceptTcpHandler) != C_OK)
        ...
    
    If a new connection type gets supported, we have to add more hard code
    to setup listener.
    
    Introduce .listen and refactor listener, and Unix socket supports this.
    this allows to setup listener arguments and create listener in a loop.
    
    What's more, '.listen' is defined in connection.h, so we should include
    server.h to import 'struct socketFds', but server.h has already include
    'connection.h'. To avoid including loop(also to make code reasonable),
    define 'struct connListener' in connection.h instead of 'struct socketFds'
    in server.h. This leads this commit to get more changes.
    
    There are more fields in 'struct connListener', hence it's possible to
    simplify changeBindAddr & applyTLSPort() & updatePort() into a single
    logic: update the listener config from the server.xxx, and re-create
    the listener.
    
    Because of the new field 'priv' in struct connListener, we expect to pass
    this to the accept handler(even it's not used currently), this may be used
    in the future.
    Signed-off-by: default avatarzhenwei pi <pizhenwei@bytedance.com>
    0b27cfe3
cluster.c 280 KB