|
Модераторы: Snowy, Poseidon, MetalFan |
|
dmitry8 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 7.2.2018 Репутация: нет Всего: нет |
Привет!
Подскажите, пожалуйста, как установить в клиенте таймаут для отправки и получения данных на сокет в блокирующем режиме. Пытаюсь сделать как в коде ниже, но функция getsockopt возвращает значения, равные 4 миллисекунды, хотя я устанавливал 500. Проблема в том, что connect(fSocket, fSockAddr, sizeof(TSockAddr)) длится более 20 секунд, если сервер не доступен (скажем, нет пинга).
Это сообщение отредактировал(а) dmitry8 - 7.2.2018, 08:22 |
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
SO_RCVTIMEO и SO_SNDTIMEO устанавливают таймаут на приём и отправку данных. не на коннект. То есть уже после соединения.
В случае ожидания соединения, следует поместить connect в цикл и делать последовательные попытки соединения. Попытка соединения 1... Попытка соединения 2... Попытка соединения 3... Попытка соединения 4... |
|||
|
||||
dmitry8 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 7.2.2018 Репутация: нет Всего: нет |
Как же тогда досрочно прервать не успешный коннект, скажем, через 500 мсек, если сервер не отвечает (нет пинга).
Т.е. не ждать 20 секунд, чтобы понять, что коннект не удачен? |
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Ну так цикл же твой. Как хочешь так его и прерывай.
Можешь завести переменную-флажок и устанавливать её, например, по нажатию кнопки, а в цикле проверять. |
|||
|
||||
dmitry8 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 7.2.2018 Репутация: нет Всего: нет |
connect проходит успешно,
после него пытаюсь установить таймаут, однако же getsockopt возвращает 4 миллисекунды вместо 500 ???
|
|||
|
||||
Snowy |
|
||||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
4 - это не таймаут - это длина Integer - ты же используешь одну и ту же переменную для получения значения и для размера.
Попробуй наоборот:
|
||||
|
|||||
Правила форума "Delphi: Сети" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |