Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 3
1

TCP SO_KEEPALIVE и таймаут на прием

08.01.2015, 23:22. Показов 1683. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть клиент, должен посылать несколько запросов подряд, поставил SO_SND+RCVTIMEO, решил добавить ему keep-alive, но с этим проблема: send() все отправляет прекрасно, но:
1. Если setsockopt SO_KEEPALIVE устанавливаю до таймаутов, не выжидая 10000 установленных мс recv возвращает -1, WSAGetLastError 10060 WSAETIMEDOUT и ничего в буфере
2. Если после, по прошествии 10 секунд recv возвращает то же самое, но в буфере все данные пришли полностью (догадываюсь что 10 секунд назад)
В чем дело? Цикл с recv у меня православный, принимает пока не вернет 0 или -1. Может надо делать как-то по-другому?

Добавлено через 8 минут
Без keep-alive все работает как часы
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2015, 23:22
Ответы с готовыми решениями:

Прием данных по протоколу TCP
Делаю программу, которая принимает данные по TCP протоколу с помощью сокета. Данные представляют...

таймер и таймаут tcp проблема
короче, если не доступен порт на удаленном компьютере программа зависает на 30 секунд примерно,...

Прием числовых типов по TCP/IP
Всем привет!!! В общем на линукс машине есть программа сервера, на моем компе программа клиента....

Отправка и прием TCP пакетов
Здравствуйте, пишу тсп клиент сервер. Все бы ничего но с толкнулся с такой проблемой при отправке...

4
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
09.01.2015, 13:44 2
Цитата Сообщение от xlflbpk Посмотреть сообщение
Есть клиент, должен посылать несколько запросов подряд, поставил SO_SND+RCVTIMEO, решил добавить ему keep-alive
Зачем ?
В 99% клиент-серверов эти опции вообще не нужны.

Цитата Сообщение от xlflbpk Посмотреть сообщение
Без keep-alive все работает как часы
Ну вот видите
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 3
09.01.2015, 15:44  [ТС] 3
Да как-то нехорошо получается, каждый раз все делать заново, создавать сокет, коннектиться, а тут есть такая сладенькая keep-alive. Может я был неправильно понят, сервер - левый домен, к которому я отношения не имею, просто получать данные надо несколько раз, с разными параметрами в строке запроса.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
09.01.2015, 15:53 4
Ну так и получайте. Закрывать соединение никто не заставляет.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 3
10.01.2015, 14:41  [ТС] 5
Без SO_KEEPALIVE (с Connection: keep-alive или вообще без заголовка) то же самое, получает все что нужно, но выходит по таймауту. Работает только с Connection: close, но тут приходится и делать все заново. Вот я и подумал что надо бы задать ему эту опцию. Может быть это вообще проблема сервера?
0
10.01.2015, 14:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2015, 14:41
Помогаю со студенческими работами здесь

Прием сообщений через TCP в 1с
добрый день. Есть программа написанная на c# которая по TCP передает определенные сообщения. нужно...

TCP прием от клиента: Сервер считывает 21 байт не за раз, а за 7 циклов
Превью. Лог от сервера И так. От клиента поступают запросы. в среднем от 20 до 30 байт. ...

Сцена зависает при запуске TCP-клиента, когда он подключен к TCP - серверу, при этом TCP-клиент полностью функционирует
Проблема описана в заголовке, и хотелось бы услышать ваше мнение, о том как можно решить проблему....

Асинхронные сокеты: Как организовать разделение на прием сообщений и прием файлов
Изучив синхронные сокеты, перешел к изучению асинхронных. Столкнулся вот с чем, как, используя...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru