|
Модераторы: feodorv |
|
Aoizora |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 18.11.2016 Репутация: нет Всего: нет |
Я пишу функцию для приложения, которая должна выполнять следующие задачи:
1. Соединиться с каждым из hardcoded клиентом p2p-сети 2. Послать ему запрос списка пиров, хранящегося в его локальной таблице 3. Принять пакеты, в поле данных каждого из которых находится информация о ноде 4. То же самое сделать со следующим элементом списка hardcoded серверов или вернуть управление из функции У меня пока что такой код:
Цикл по всем нодам, к каждой ноде выполняется запрос. Мне нужно как-то отсюда выйти, когда сервер перестанет посылать данные по UDP (или перейти к другому элементу списка). Как это сделать |
|||
|
||||
tzirechnoy |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
По таймаутам.
Ну, ещё можно в сервере указать, когда последний пакет послан. Но по таймаутам -- абсолютно обязательно. |
|||
|
||||
Aoizora |
|
||||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 18.11.2016 Репутация: нет Всего: нет |
По таймаутам - это вот так?
|
||||
|
|||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
Что то типа этого делаешь ?
https://aminux.wordpress.com/2017/01/12/gov...rents-download/ А по поводу кода - да, без селекта ВООБЩЕ НИКАК. Так по ублюдочному сделан стек в винде. recv будет висеть ВЕЧНО... Я тоже споткнулся об это. Ну по логике - нет данных, верни что прочитал (0,1 или 0.5 на крайняк ) и отпусти ты дальше прогу выполняться, так нет же - до сих пор селект надо, даже если тебе пофиг или сам разрулишь если получил/принял меньше чем присылалось/отправлялось. Причем такое даунское поведение именно тогда когда recv буфер пуст. |
|||
|
||||
feodorv |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
Прежде чем так возмущаться перевести сокет в асинхронный режим не пробовали? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Олег2005 |
|
|||
Опытный Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Или использовать IOCP?
На худой конец WSAEventSelect? |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
||||
|
||||
feodorv |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
Честно говоря, я не знаю, что там в JavaScript с асинхронными сокетами - колбек или нет, да и причем он тут, если речь идёт о C/C++. Сокет можно перевести в асинхронный режим через FIONBIO, а затем пользовать read безо всяких колбеков. Но речь-то идёт об этой фразе:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |