Steck
написал 8 марта 2006 года в 19:30 (1043 просмотра)
Ведет себя
как мужчина; открыл 125 тем в форуме, оставил 550 комментариев на сайте.
Народ такая проблема:
читаю из сокета
if(recv(fd,tmpStr,REPLYBUF,0) <=0)
{
….
}
Проблема заключается в том что если не пришли данные в сокет то прога висит
и ожидает пока ее не кильнуть…виснит мертво.
А данные могут придти а могут и нет..
пробовал так:
if(recv(fd,tmpStr,REPLYBUF,MSG_DONTWAIT) == -1)
{
….
}
Т.е сделать сокет NON Block. Но при таком коде даже если данные приходят
все равно выполняется условие как будто данные не пришли…
Покажите в какую сторону копать?..
P.S select() тут не подойдет..
Интересно почему с MSG_DONTWAIT все время возвращает -1 ..
Последние комментарии
-
OlegL, 17 декабря в 15:00 → Перекличка 21
-
REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
-
fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
-
Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
![ecobeing ecobeing](/uploads/ad/image/d543f002e66d5f1767eb81016544b976336e76e5.png)
Экология и вегетарианство на благо всем живым существам Планеты.
А почему не пойдёт select?
Можешь попробовать что-нибудь из aio_* функций.
Действительно интересно. А errno что говорит?
printf(strerror(errno));
Выводит такое
Resource temporarily unavailable
Не может этого быть..
Т.е., EAGAIN, как и ожидалось. Присоединяюсь к вопросу про select.
Steck ты бы налабал бы по быстрому маленькую прогу демонстрирующую проблему. Маленькую, чтобы её запостить можно было бы, но завершённую. Потому как гадать, что же ты там не так сделал — неблагодарный труд.
Дык маленькую не получится скорее всего там, все связано.
а второе не у всех есть мобила с bluetooth+bluetooth адаптер ;-)
Да я уже решил select() юзать.
просто не хотелоь загромождать код.
теперь придется отдельной нитью все это реализовывать что бы прога не висла на select’e этом.
На select можно timeout поставить и ничего виснуть не будет