nixp.ru v3.0

20 января 2017,
пятница,
04:50:52 MSK

DevOps с компанией «Флант»
Аватар пользователя Steck
Steck написал 8 марта 2006 года в 19:30 (432 просмотра) Ведет себя как мужчина; открыл 124 темы в форуме, оставил 549 комментариев на сайте.

Народ такая проблема:

читаю из сокета

if(recv(fd,tmpStr,REPLYBUF,0) <=0)

{

….

}

Проблема заключается в том что если не пришли данные в сокет то прога висит

и ожидает пока ее не кильнуть…виснит мертво.

А данные могут придти а могут и нет..

пробовал так:

if(recv(fd,tmpStr,REPLYBUF,MSG_DONTWAIT) == -1)

{

….

}

Т.е сделать сокет NON Block. Но при таком коде даже если данные приходят

все равно выполняется условие как будто данные не пришли…

Покажите в какую сторону копать?..

P.S select() тут не подойдет..

Интересно почему с MSG_DONTWAIT все время возвращает -1 ..

myst

А почему не пойдёт select?

Можешь попробовать что-нибудь из aio_* функций.

vnp
Steck
Интересно почему с MSG_DONTWAIT все время возвращает -1 ..

Действительно интересно. А errno что говорит?

Steck

printf(strerror(errno));

Выводит такое

Resource temporarily unavailable

Не может этого быть..

vnp
Steck
printf(strerror(errno));

Выводит такое

Resource temporarily unavailable

Не может этого быть..

Т.е., EAGAIN, как и ожидалось. Присоединяюсь к вопросу про select.

rgo

Steck ты бы налабал бы по быстрому маленькую прогу демонстрирующую проблему. Маленькую, чтобы её запостить можно было бы, но завершённую. Потому как гадать, что же ты там не так сделал — неблагодарный труд.

Steck
rgo
Steck ты бы налабал бы по быстрому маленькую прогу демонстрирующую проблему. Маленькую, чтобы её запостить можно было бы, но завершённую. Потому как гадать, что же ты там не так сделал — неблагодарный труд.

Дык маленькую не получится скорее всего там, все связано.

а второе не у всех есть мобила с bluetooth+bluetooth адаптер ;-)

Да я уже решил select() юзать.

просто не хотелоь загромождать код.

теперь придется отдельной нитью все это реализовывать что бы прога не висла на select’e этом.

metal

На select можно timeout поставить и ничего виснуть не будет

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.