]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Modified nonblocking connect code so that this works as it should:
authorjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Mon, 28 Nov 2005 04:59:19 +0000 (04:59 +0000)
committerjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Mon, 28 Nov 2005 04:59:19 +0000 (04:59 +0000)
./openvpn --dev tap --proto tcp-client --verb 4 --remote [Black-Hole-IP-Addr] --connect-retry-max 1 --remap-usr1 SIGTERM

git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@826 e7ae566f-a301-0410-adde-c780ea21d3b5

socket.c

index 2a85191fc7d19f770f8b7a12a3a5728eebc37caa..54a24b2a68359a151fad85d7dd82bbb61b750d38 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -811,10 +811,9 @@ socket_connect (socket_descriptor_t *sd,
 
   while (true)
     {
-      const int status = openvpn_connect (*sd, remote, connect_timeout, signal_received);
+      int status;
 
-      if (connect_retry_max != 0 && retry++ >= connect_retry_max)
-       *signal_received = SIGUSR1;
+      status = openvpn_connect (*sd, remote, connect_timeout, signal_received);
 
       get_signal (signal_received);
       if (*signal_received)
@@ -830,8 +829,20 @@ socket_connect (socket_descriptor_t *sd,
           strerror_ts (status, &gc));
 
       openvpn_close_socket (*sd);
+      *sd = SOCKET_UNDEFINED;
+
+      if (connect_retry_max > 0 && ++retry >= connect_retry_max)
+       {
+         *signal_received = SIGUSR1;
+         goto done;
+       }
+
       openvpn_sleep (connect_retry_seconds);
 
+      get_signal (signal_received);
+      if (*signal_received)
+       goto done;
+
       if (remote_list)
        {
          remote_list_next (remote_list);