Georg Horn provided a fix for the timeout signal stuff. Finally the timeout
authorDaniel Stenberg <daniel@haxx.se>
Thu, 26 Oct 2000 21:57:12 +0000 (21:57 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 26 Oct 2000 21:57:12 +0000 (21:57 +0000)
switch should work under most unixes (requires sigaction())

lib/url.c

index 32faa34..c941e99 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -686,6 +686,9 @@ CURLcode curl_connect(CURL *curl, CURLconnect **in_connect)
   char resumerange[12]="";
   struct UrlData *data = curl;
   struct connectdata *conn;
+#ifdef HAVE_SIGACTION
+  struct sigaction sigact;
+#endif
 
   if(!data || (data->handle != STRUCT_OPEN))
     return CURLE_BAD_FUNCTION_ARGUMENT; /* TBD: make error codes */
@@ -711,8 +714,11 @@ CURLcode curl_connect(CURL *curl, CURLconnect **in_connect)
 
   buf = data->buffer; /* this is our buffer */
 
-#if 0
-  signal(SIGALRM, alarmfunc);
+#ifdef HAVE_SIGACTION
+  sigaction(SIGALRM, NULL, &sigact);
+  sigact.sa_handler = alarmfunc;
+  sigact.sa_flags &= ~SA_RESTART;
+  sigaction(SIGALRM, &sigact, NULL);
 #endif
 
   /* Parse <url> */
@@ -1393,11 +1399,9 @@ CURLcode curl_connect(CURL *curl, CURLconnect **in_connect)
       failf(data, "Attempt to connect to broadcast address without socket broadcast flag or local firewall rule violated: %d",errno);
       break;
 #endif
-#ifdef EINTR
     case EINTR:
       failf(data, "Connection timeouted");
       break;
-#endif
 #if 0
     case EAFNOSUPPORT:
       failf(data, "Incorrect address family: %d",errno);