PR: 1990
[openssl.git] / crypto / bio / bss_dgram.c
index 027cdf943b7973b174f93b8325e48294dff0785f..cd9f497a25031991c7475c7b8c74388c3e3a44f4 100644 (file)
@@ -250,17 +250,22 @@ static void dgram_reset_rcv_timeout(BIO *b)
        {
 #if defined(SO_RCVTIMEO)
        bio_dgram_data *data = (bio_dgram_data *)b->ptr;
+
+       /* Is a timer active? */
+       if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0)
+               {
 #ifdef OPENSSL_SYS_WINDOWS
-       int timeout = data->socket_timeout.tv_sec * 1000 +
-                                 data->socket_timeout.tv_usec / 1000;
-       if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
-                                  (void*)&timeout, sizeof(timeout)) < 0)
-               { perror("setsockopt"); }
+               int timeout = data->socket_timeout.tv_sec * 1000 +
+                                         data->socket_timeout.tv_usec / 1000;
+               if (setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
+                                          (void*)&timeout, sizeof(timeout)) < 0)
+                       { perror("setsockopt"); }
 #else
-       if ( setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, &(data->socket_timeout),
-                                       sizeof(struct timeval)) < 0)
-               { perror("setsockopt"); }
+               if ( setsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, &(data->socket_timeout),
+                                               sizeof(struct timeval)) < 0)
+                       { perror("setsockopt"); }
 #endif
+               }
 #endif
        }