Я пишу мини-FTP-сервер на Python, который предоставляет базовую базу данных, как если бы это был FTP. Поток примерно такой:
sock.send("150 Here's the file you wanted\r\n")
proc = Popen2(...)
for parts in data:
data_sock.send(parts)
proc.kill()
sock.send("226 There's the file you wanted\r\n")
data_sock.shutdown(0)
data_sock.close()
data_sock - это работающий и работающий сокет PASV, подтвержденный Wireshark. На самом деле, после отправки 163,328-го байта через data_sock строка data_sock.send () просто зависает. Я подозреваю, что буфер отправки заполнен, но для меня загадка, почему клиенты FTP не будут читать данные из сокета PASV.
Я включил строку Popen2 (...), потому что мне удалось воспроизвести http://bugs.python.org/issue3006 на OS X - сокеты не закрываются, пока не завершится процесс Popen. Не уверен, что это как-то связано.