LINUX.ORG.RU

recv()


0

0

Здравствуйте. Мне непонятен один момент при работе с с этой функцией - допустим идет у меня работа с тем же смтп, т.е. конектюсь к серверу, и жду от него ответ (220...), но как я понимаю, к моменту вызова recv данные могу не придти, и recv ничего не вернет ? А если нет, то она будет ждать поступления данных до таймаута, а какой объем данных она будет ждать? Все что послал сервер ?

Вообще как правильно организовать работу с сокетом ? Пока у мен тупо connect(), recv(), send(), recv() (с проверкой возвращаемых значений). Мне кажется, что нужно при recv использовать select, и когда она скажет,, что пришли данные - вызвать recv. Или это я что-то ненужное нагорожу ?

Просто в таком вие, как я описал, не всегда кореектно посылаются данные...

Заранее спасибо за помощь

anonymous

Re: recv()

Ты скорее всего используешь блокирующий режим сокета. Т.е. твоя программа ждет внутри ф-ии recv() пока не придет сколько-нибудь данных(не до таймаута, а сколько нужно).
А вообще прочитай наконец man recv ;)

anonymous ()
Ответ на: Re: recv() от anonymous

Re: recv()

Передал функции recv() флаг MSG_WAITALL, стало медленее, но без глюков..

anonymous ()
Ответ на: Re: recv() от anonymous

Re: recv()

в тривиальных случаях можно обойтись без select. он обычно рулит когда тебе надо одной прогой одновременно отслеживать несколько ФД. Так вот чтобы лишний раз не лезть при помощи recv() на пустой ФД а заниматся делом можно заюзать select().

cvv ★★★★★ ()
Ответ на: Re: recv() от anonymous

Re: recv()

для одног соединения такое решение подходит вполне а вот для 101 - вообще неподходит.

cvv ★★★★★ ()
Ответ на: Re: recv() от cvv

Re: recv()

Ну у меня устанавливается только одно соединение, но почему он не подходит для 101 ?

anonymous ()
Ответ на: Re: recv() от anonymous

Re: recv()

Потому что на ето уйдёт ОЧЕНЬ много времени. БОЛЬШЕ чем 101 таймаут. а при помощи select ты имееш возможность опросить все 101 соединение за время приблизительно равное двум таймаутам.

PS: здесь я немного утрирую.

cvv ★★★★★ ()
Ответ на: Re: recv() от cvv

Re: recv()

А ну да, так то ессно, я просто не совсем понял. :) Все равн спасибо. Но мне нечего делать, кроме того как ждать данных ...

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.