diff --git a/CHANGES b/CHANGES index 4d7f683ef..f1a644fd4 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,10 @@ Changelog +Daniel Stenberg (7 May 2009) +- Made the SO_SNDBUF setting for the data connection socket for ftp uploads as + well. See change 28 Apr 2009. + Yang Tse (7 May 2009) - Fixed an issue affecting FTP transfers, introduced with the transfer.c patch committed May 4. diff --git a/lib/connect.c b/lib/connect.c index d7b2f7fc0..930b2b039 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -714,15 +714,13 @@ static void nosigpipe(struct connectdata *conn, Buffer Size */ -static void sndbufset(struct connectdata *conn, - curl_socket_t sockfd) +void Curl_sndbufset(curl_socket_t sockfd) { int val = CURL_MAX_WRITE_SIZE + 32; - (void)conn; setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (const char *)&val, sizeof(val)); } #else -#define sndbufset(x,y) +#define Curl_sndbufset(y) #endif @@ -829,7 +827,7 @@ singleipconnect(struct connectdata *conn, nosigpipe(conn, sockfd); - sndbufset(conn, sockfd); + Curl_sndbufset(sockfd); if(data->set.fsockopt) { /* activate callback for setting socket options */ diff --git a/lib/connect.h b/lib/connect.h index 38ed4125b..ae47c2174 100644 --- a/lib/connect.h +++ b/lib/connect.h @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2008, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2009, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -54,4 +54,20 @@ long Curl_timeleft(struct connectdata *conn, CURLcode Curl_getconnectinfo(struct SessionHandle *data, long *param_longp, struct connectdata **connp); + +#ifdef WIN32 +/* When you run a program that uses the Windows Sockets API, you may + experience slow performance when you copy data to a TCP server. + + http://support.microsoft.com/kb/823764 + + Work-around: Make the Socket Send Buffer Size Larger Than the Program Send + Buffer Size + +*/ +void Curl_sndbufset(curl_socket_t sockfd); +#else +#define Curl_sndbufset(y) +#endif + #endif diff --git a/lib/ftp.c b/lib/ftp.c index e8f51c685..e9931ae04 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -2308,6 +2308,9 @@ static CURLcode ftp_state_stor_resp(struct connectdata *conn, Curl_pgrsSetUploadSize(data, data->set.infilesize); + /* set the SO_SNDBUF for the secondary socket for those who need it */ + Curl_sndbufset(conn->sock[SECONDARYSOCKET]); + result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, /* no download */ SECONDARYSOCKET, ftp->bytecountp); state(conn, FTP_STOP);