--- ftp.c	2010-08-10 11:19:00.000000000 +0200
+++ ../../curl-7.21.1-xware/lib/ftp.c	2010-09-15 14:43:43.751765500 +0200
@@ -344,9 +344,22 @@
     default:
       /* we have received data here */
       if(0 == getsockname(sock, (struct sockaddr *) &add, &size)) {
-        size = sizeof(add);
+        curl_socket_t sockfd;
 
-        s=accept(sock, (struct sockaddr *) &add, &size);
+        size = sizeof(add);
+        
+        if(data->set.fopensocket) {
+          struct curl_sockaddr caddr;
+          struct sockaddr* sptr = &caddr.addr;
+          memcpy(sptr, &add, sizeof(struct sockaddr));
+          sockfd = data->set.fopensocket(data->set.opensocket_client,
+                                         CURLSOCKTYPE_FTPDATACXN,
+                                         (struct curl_sockaddr *)&caddr);
+        }
+        if (CURL_SOCKET_BAD == sockfd)
+          s = CURL_SOCKET_BAD;
+        else
+          s=accept(sock, (struct sockaddr *) &add, &size);
       }
       sclose(sock); /* close the first socket */
 

