- xclose (csock);
- rbuf_uninitialize (&con->rbuf);
- return err;
- break;
- case WRITEFAILED:
- logputs (LOG_VERBOSE, "\n");
- logputs (LOG_NOTQUIET,
- _("Write failed, closing control connection.\n"));
- xclose (csock);
- rbuf_uninitialize (&con->rbuf);
- return err;
- break;
- case FTPNOPASV:
- logputs (LOG_VERBOSE, "\n");
- logputs (LOG_NOTQUIET, _("Cannot initiate PASV transfer.\n"));
- break;
- case FTPINVPASV:
- logputs (LOG_VERBOSE, "\n");
- logputs (LOG_NOTQUIET, _("Cannot parse PASV response.\n"));
- break;
- case FTPOK:
- /* fine and dandy */
- break;
- default:
- abort ();
- break;
- } /* switch(err) */
- if (err==FTPOK)
- {
- DEBUGP (("trying to connect to %s port %d\n",
- pretty_print_address (&passive_addr),
- passive_port));
- dtsock = connect_to_ip (&passive_addr, passive_port, NULL);
- if (dtsock < 0)
- {
- int save_errno = errno;
- xclose (csock);
- rbuf_uninitialize (&con->rbuf);
- logprintf (LOG_VERBOSE, _("couldn't connect to %s port %hu: %s\n"),
- pretty_print_address (&passive_addr), passive_port,
- strerror (save_errno));
- return CONNECT_ERROR (save_errno);
- }
+ fd_close (csock);
+ con->csock = -1;
+ return err;
+ case WRITEFAILED:
+ logputs (LOG_VERBOSE, "\n");
+ logputs (LOG_NOTQUIET,
+ _("Write failed, closing control connection.\n"));
+ fd_close (csock);
+ con->csock = -1;
+ return err;
+ case FTPNOPASV:
+ logputs (LOG_VERBOSE, "\n");
+ logputs (LOG_NOTQUIET, _("Cannot initiate PASV transfer.\n"));
+ break;
+ case FTPINVPASV:
+ logputs (LOG_VERBOSE, "\n");
+ logputs (LOG_NOTQUIET, _("Cannot parse PASV response.\n"));
+ break;
+ case FTPOK:
+ break;
+ default:
+ abort ();
+ } /* switch (err) */
+ if (err==FTPOK)
+ {
+ DEBUGP (("trying to connect to %s port %d\n",
+ print_address (&passive_addr), passive_port));
+ dtsock = connect_to_ip (&passive_addr, passive_port, NULL);
+ if (dtsock < 0)
+ {
+ int save_errno = errno;
+ fd_close (csock);
+ con->csock = -1;
+ logprintf (LOG_VERBOSE, _("couldn't connect to %s port %d: %s\n"),
+ print_address (&passive_addr), passive_port,
+ strerror (save_errno));
+ return (retryable_socket_connect_error (save_errno)
+ ? CONERROR : CONIMPOSSIBLE);
+ }