Форум программистов, компьютерный форум CyberForum.ru

Клиент-сервер (функция read) - C Linux

Восстановить пароль Регистрация
 
xoxotyn
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 1
28.12.2016, 19:24     Клиент-сервер (функция read) #1
Что должна возвращать функция read, если я пытаюсь считать данные, но сервер мне их не отсылал? И должна ли? Потому что у меня просто зависает программа. То есть я даже проверку сделать не могу.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2016, 19:24     Клиент-сервер (функция read)
Посмотрите здесь:

C Linux rpc. Связка клиент сервер и написания лог файла.
Падает программа клиент-сервер C Linux
Создать взаимодействие клиент-сервер с помощью Канала FIFO C Linux
C Linux Низкоуровневые сокеты. Udp клиент-сервер
C Linux Клиент и сервер в одной программе
Исключение в чате. Клиент на С# в win7. Сервер на С++ в Raspberry Pi (raspbian) C Linux
Написать программу клиент-сервер для передачи файла по сети C Linux
Чат (Сервер|Клиент) с UDP протоколом C Linux
Ошибка сегментирования когда клиент уже отправил данные на сервер C Linux
Как объединить UDP клиент/сервер в одну программу? C Linux
TCP/IP сервер - клиент - как работать с потоками? C Linux
C Linux Клиент сервер не работает через интернет

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Вованя
121 / 121 / 47
Регистрация: 20.02.2014
Сообщений: 429
28.12.2016, 20:08     Клиент-сервер (функция read) #2
xoxotyn, так и будет висеть, пока сервер не пришлет, ну или ошибка не вывалится man read
Humanoid
Почетный модератор
 Аватар для Humanoid
9870 / 3765 / 147
Регистрация: 12.06.2008
Сообщений: 11,346
28.12.2016, 22:02     Клиент-сервер (функция read) #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от xoxotyn Посмотреть сообщение
Что должна возвращать функция read, если я пытаюсь считать данные, но сервер мне их не отсылал?
Если сокет находится в блокирующем режиме (он используется по умолчанию), то, как сказали выше, функция не вернёт управление до тех пор, пока не примет хоть какие-нибудь данные. Если сокет в неблокирующем режиме, то read() вернёт -1, а errno будет установлена в EAGAIN.
Чтобы перед запуском read() убедиться, что данные уже ожидают и функция не заблокирует работу приложения, можно воспользоваться одной из функций select/poll/epoll. Все эти функции немного по разному вызываются, но в простейшем случае выполняют одну и туже задачу - ждут, пока для файлового дескриптора (а сокет - это тоже файловый дескриптор) не будут доступны данные. Но время ожидания у этих функций можно регулировать. Например, если указать timeout как 0, тогда функция сразу вернёт состояние файлового дескриптора.
Yandex
Объявления
28.12.2016, 22:02     Клиент-сервер (функция read)
Ответ Создать тему
Опции темы

Текущее время: 08:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru