Somewhat ugly fix to deal with non-blocking sockets. We just loop and try
authorDaniel Stenberg <daniel@haxx.se>
Wed, 16 Jan 2002 14:46:00 +0000 (14:46 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 16 Jan 2002 14:46:00 +0000 (14:46 +0000)
again. THIS IS NOT A NICE FIX. We should/must make a select() then and only
retry when we can write to the socket again.

lib/ftp.c

index 2def61f..0ac280f 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2058,9 +2058,11 @@ CURLcode Curl_ftp(struct connectdata *conn)
 CURLcode Curl_ftpsendf(struct connectdata *conn,
                        const char *fmt, ...)
 {
-  size_t bytes_written;
+  ssize_t bytes_written;
   char s[256];
-  size_t write_len;
+  ssize_t write_len;
+  char *sptr=s;
+  CURLcode res = CURLE_OK;
 
   va_list ap;
   va_start(ap, fmt);
@@ -2074,9 +2076,23 @@ CURLcode Curl_ftpsendf(struct connectdata *conn,
 
   bytes_written=0;
   write_len = strlen(s);
-  Curl_write(conn, conn->firstsocket, s, write_len, &bytes_written);
 
-  return (bytes_written==write_len)?CURLE_OK:CURLE_WRITE_ERROR;
+  do {
+    res = Curl_write(conn, conn->firstsocket, sptr, write_len,
+                     &bytes_written);
+
+    if(CURLE_OK != res)
+      break;
+
+    if(bytes_written != write_len) {
+      write_len -= bytes_written;
+      sptr += bytes_written;
+    }
+    else
+      break;
+  } while(1);
+
+  return res;
 }
 
 /***********************************************************************