diff -urN yafc-1.3.7-orig/src/ftp/ftpsend.c yafc-1.3.7/src/ftp/ftpsend.c
--- yafc-1.3.7-orig/src/ftp/ftpsend.c	2016-01-02 01:49:59 +0900
+++ yafc-1.3.7/src/ftp/ftpsend.c	2017-06-11 14:58:42 +0900
@@ -688,16 +688,24 @@
     ftp_cmd("%s %s", cmd, param);
   else
     ftp_cmd("%s", cmd);
-  if (ftp->code != ctPrelim)
+  if (ftp->code != ctPrelim) {
+    sock_destroy(ftp->data);
+    ftp->data = NULL;
     return -1;
+  }
 
   if (!sock_accept(ftp->data, "r", ftp_is_passive())) {
     perror("accept()");
+    sock_destroy(ftp->data);
+    ftp->data = NULL;
     return -1;
   }
 
-  if (FILE_recv_ascii(ftp->data, fp) != 0)
+  if (FILE_recv_ascii(ftp->data, fp) != 0) {
+    sock_destroy(ftp->data);
+    ftp->data = NULL;
     return -1;
+  }
 
   sock_destroy(ftp->data);
   ftp->data = NULL;
@@ -740,11 +748,16 @@
 	}
 
 	ftp_cmd("RETR %s", path);
-	if(ftp->code != ctPrelim)
+	if(ftp->code != ctPrelim) {
+		sock_destroy(ftp->data);
+		ftp->data = NULL;
 		return -1;
+	}
 
 	if(!sock_accept(ftp->data, "r", ftp_is_passive())) {
 		ftp_err(_("data connection not accepted\n"));
+		sock_destroy(ftp->data);
+		ftp->data = NULL;
 		return -1;
 	}
 
@@ -837,8 +850,11 @@
 	if(rp > 0) {
 		/* fp is assumed to be fseek'd already */
 		ftp_cmd("REST %ld", rp);
-		if(ftp->code != ctContinue)
+		if(ftp->code != ctContinue) {
+			sock_destroy(ftp->data);
+			ftp->data = NULL;
 			return -1;
+		}
 		ftp->ti.size = rp;
 		ftp->ti.restart_size = rp;
 	}
@@ -867,8 +883,11 @@
     break;
   }
 
-	if(ftp->code != ctPrelim)
+	if(ftp->code != ctPrelim) {
+		sock_destroy(ftp->data);
+		ftp->data = NULL;
 		return -1;
+	}
 
 	if(how == putUnique) {
 		/* try to figure out remote filename */
@@ -891,6 +910,8 @@
 
 	if(!sock_accept(ftp->data, "w", ftp_is_passive())) {
 		ftp_err(_("data connection not accepted\n"));
+		sock_destroy(ftp->data);
+		ftp->data = NULL;
 		return -1;
 	}
 
