--- a/src/main.c	2007-12-05 12:39:07.000000000 +0100
+++ b/src/main.c	2007-12-05 13:59:26.000000000 +0100
@@ -3521,6 +3521,25 @@ static void dumpeasycode(struct Configur
   curl_slist_free_all(easycode);
 }
 
+
+int set_so_keepalive(void *clientp, curl_socket_t curlfd, curlsocktype purpose)
+{
+  int data = 1;
+
+  switch (purpose) {
+  case CURLSOCKTYPE_IPCXN:
+    if (setsockopt(curlfd, SOL_SOCKET, SO_KEEPALIVE, &data, sizeof(data)) < 0) {
+      fprintf(stderr, "/!\\ Could not set SO_KEEPALIVE /!\\\n");
+      return 1;
+    }
+    break;
+  default:
+    fprintf(stderr, "/!\\ Unknown CURLOPT_SOCKOPTFUNCTION purpose /!\\\n");
+  }
+
+  return 0;
+}
+
 static int
 operate(struct Configurable *config, int argc, argv_item_t argv[])
 {
@@ -4408,6 +4427,7 @@ operate(struct Configurable *config, int
 
         /* curl 7.17.1 */
         my_setopt(curl, CURLOPT_POST301, config->post301);
+        my_setopt(curl, CURLOPT_SOCKOPTFUNCTION, set_so_keepalive);
 
         retry_numretries = config->req_retry;
 

