--- a/clientserver.c +++ b/clientserver.c @@ -121,8 +121,6 @@ int start_socket_client(char *host, int remote_argc, char *remote_argv[], if (fd == -1) exit_cleanup(RERR_SOCKETIO); - set_socket_options(fd, sockopts); - #ifdef ICONV_CONST setup_iconv(); #endif @@ -931,10 +929,6 @@ int start_daemon(int f_in, int f_out) if (!am_server) { set_socket_options(f_in, "SO_KEEPALIVE"); - if (sockopts) - set_socket_options(f_in, sockopts); - else - set_socket_options(f_in, lp_socket_options()); set_nonblocking(f_in); } --- a/socket.c +++ b/socket.c @@ -31,6 +31,7 @@ #include extern char *bind_address; +extern char *sockopts; extern int default_af_hint; extern int connect_timeout; @@ -272,6 +273,7 @@ int open_socket_out(char *host, int port, const char *bind_addr, alarm(connect_timeout); } + set_socket_options(s, sockopts); while (connect(s, res->ai_addr, res->ai_addrlen) < 0) { if (connect_timeout < 0) exit_cleanup(RERR_CONTIMEOUT); @@ -433,6 +435,10 @@ static int *open_socket_in(int type, int port, const char *bind_addr, setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof one); + if (sockopts) + set_socket_options(s, sockopts); + else + set_socket_options(s, lp_socket_options()); #ifdef IPV6_V6ONLY if (resp->ai_family == AF_INET6) {