Назад, когда был запущен .NET Framework 1.0, хороших реализаций FTP-клиентов для .NET не было, поэтому я написал свою собственную реализацию с использованием System.Net.Socket. Недавно мне пришлось внести в него некоторые изменения, и во время отладки я заметил искаженный вывод с FTP-сервера IIS 5.1, с которым я тестирую (WinXP SP 2) при закрытии соединения.
Связь идет так:
Send: QUIT<CRLF>
Receive: 221<CRLF><NUL>?<ETX><NUL>
(socket closed)
Обработчик канала команд FTP ориентирован на линию с использованием CRLF в качестве терминатора, и после получения четырех байтов после первого CRLF он ожидает второй CRLF, вызывающий ошибку времени ожидания. Вся последовательность возвращается единственной операцией чтения сокета, и я проверил, что число байтов, возвращенное из сокета, является правильным.
Эта последовательность байтов согласована с этим сервером, и мне было интересно, можно ли это предотвратить / можно предотвратить, или мне просто нужно «быстро исправить», добавив его в мой список «причуд MS FTP-сервера». 1008 *