Unable to abort a FTP command?

_wdx at 163.com _wdx at 163.com
Wed Jul 25 22:17:54 EDT 2007


Thank you. You are right, retrbinary did not notice I want to abort,
so it won't break the recv loop and close data connection. I changed
getpart and callback like this, now it works:

    def getpart_callback(self, received):
        print "received a packet"
        if self.cnt <= 0:
            return True
        else:
            print 'received packet, [0] = %x' % ord(received[0])
            self.outf.write(received)
            self.cnt -= len(received)

    def getpart(self, ftp_filename, rest, cnt, out_filename):
        self.outf = open(out_filename, 'wb')
        self.cnt = cnt
        self.handle.voidcmd('TYPE I')
        conn = self.handle.transfercmd('RETR ' + ftp_filename, rest)
        while 1:
            data = conn.recv(8192)
            if not data:
                break
            if self.getpart_callback(data):
                try:
                    self.handle.abort()
                    break
                except:
                    pass
        self.outf.close()
        self.handle.voidresp()
        conn.close()




More information about the Python-list mailing list