| --- a/Lib/ftplib.py |
| +++ b/Lib/ftplib.py |
| @@ -343,19 +343,23 @@ |
| host, port = self.makepasv() |
| conn = socket.create_connection((host, port), self.timeout, |
| source_address=self.source_address) |
| - if rest is not None: |
| - self.sendcmd("REST %s" % rest) |
| - resp = self.sendcmd(cmd) |
| - # Some servers apparently send a 200 reply to |
| - # a LIST or STOR command, before the 150 reply |
| - # (and way before the 226 reply). This seems to |
| - # be in violation of the protocol (which only allows |
| - # 1xx or error messages for LIST), so we just discard |
| - # this response. |
| - if resp[0] == '2': |
| - resp = self.getresp() |
| - if resp[0] != '1': |
| - raise error_reply(resp) |
| + try: |
| + if rest is not None: |
| + self.sendcmd("REST %s" % rest) |
| + resp = self.sendcmd(cmd) |
| + # Some servers apparently send a 200 reply to |
| + # a LIST or STOR command, before the 150 reply |
| + # (and way before the 226 reply). This seems to |
| + # be in violation of the protocol (which only allows |
| + # 1xx or error messages for LIST), so we just discard |
| + # this response. |
| + if resp[0] == '2': |
| + resp = self.getresp() |
| + if resp[0] != '1': |
| + raise error_reply(resp) |
| + except: |
| + conn.close() |
| + raise |
| else: |
| sock = self.makeport() |
| if rest is not None: |