Moved the setting of the socket options before the connect().
authorWayne Davison <wayned@samba.org>
Tue, 15 Apr 2008 15:34:17 +0000 (08:34 -0700)
committerWayne Davison <wayned@samba.org>
Tue, 15 Apr 2008 15:34:17 +0000 (08:34 -0700)
clientserver.c
socket.c

index 5291356..f78c61c 100644 (file)
@@ -121,8 +121,6 @@ int start_socket_client(char *host, int remote_argc, char *remote_argv[],
        if (fd == -1)
                exit_cleanup(RERR_SOCKETIO);
 
        if (fd == -1)
                exit_cleanup(RERR_SOCKETIO);
 
-       set_socket_options(fd, sockopts);
-
 #ifdef ICONV_CONST
        setup_iconv();
 #endif
 #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 (!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);
        }
 
                set_nonblocking(f_in);
        }
 
index 65ee61a..8d4a89d 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -31,6 +31,7 @@
 #include <netinet/tcp.h>
 
 extern char *bind_address;
 #include <netinet/tcp.h>
 
 extern char *bind_address;
+extern char *sockopts;
 extern int default_af_hint;
 extern int connect_timeout;
 
 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);
                }
 
                        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);
                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);
 
                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) {
 
 #ifdef IPV6_V6ONLY
                if (resp->ai_family == AF_INET6) {