--- lib/ftp.c	2010-08-10 11:19:00.000000000 +0200
+++ ../curl-7.21.1-xware/lib/ftp.c	2010-09-17 10:45:12.507497400 +0200
@@ -343,10 +343,26 @@
       break; /* loop */
     default:
       /* we have received data here */
-      if(0 == getsockname(sock, (struct sockaddr *) &add, &size)) {
-        size = sizeof(add);
-
+      if(0 == getsockname(sock, (struct sockaddr *) &add, &size)) {       
+        size = sizeof(add);        
         s=accept(sock, (struct sockaddr *) &add, &size);
+
+        if (s != CURL_SOCKET_BAD && data->set.fopensocket) {
+            curl_socket_t sockfd;
+            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)
+            {
+              sclose(s);
+              s = CURL_SOCKET_BAD;
+            }
+            else
+              sclose(sockfd);
+        }
       }
       sclose(sock); /* close the first socket */
 

