Моя программа на C++ пытается проверить статус ftp-сервера. Он использует Winsock и простую функцию тестирования, которая выглядит следующим образом (псевдокод):Как правильно поймать начальный отклик сервера?
create a tcp socket
connect to port 21 of the server
do recv() while data is available
close socket
return received data
Он не посылает никаких данных на сервер с посылом() - просто пытаюсь поймать первоначальный ответ сервера. Это действительно работает и возвращает «200 Response Server Ready» - это именно то, что мне нужно. Но после второго запуска той же функции (сразу после первого запуска) он ничего не возвращает (потому что recv() возвращает -1). Wireshark сообщает мне, что сервер действительно не отправил ответ. После этого я поставил половину секунды паузы между вызовами функции тестирования, и теперь она работает, но это решение нежелательно. Вопрос: Как правильно уловить исходный ответ сервера (а не только ftp, но и любой другой)?
является вашим recv асинхронным или блокирующим? – user1810087
recv блокирует, и теперь я использую setsockopt() для установки времени recv – YuriM
Если 'recv()' возвращает -1, вызовите 'WSAGetLastError()', чтобы узнать, почему. –