Здравствуйте, niXman, Вы писали:
X>подключаюсь к некоторому серверу, который в данный момент не "слушает" порт, и получаю connection timed out спустя 5 минут.
Восхитительный пример для недавней темы "Поугараем над С++". То, что есть в чистом socket api уже десятилетия, до сих пор отсутствует в чудо-библиотеках с пространствами имён вида "boost::asio::ip::tcp::socket". Сразу видно, на века делали. А вдруг там будет не ip? А вдруг там будет не tcp? А у нас для этого неймспейс имеется, мы умные, мы предусмотрели!
По самому вопросу — вот создавайте сокет отдельно и передавайте его дескриптор. Заверните это в красивую ООП-обёртку.
вообще в asio можно в любой момент получить нативный сокет и работать с ним напрямую, просто автор совсем не понимает что делает, и не понимает, что это ему совершенно не нужно, делает странное (хочет перевести сокет в неблокирующий режим, ага. название библиотеки asio ему видимо ни о чём не говорит), и поэтому спрашивает странное. Правильный ответ я ему дал, но возможно должны пройти годы, прежде чем он это осознает.
p.s.
и ещё топикстартер с тонкой душевной организацией и больным чсв))
Здравствуйте, niXman, Вы писали:
X>в гугле есть решения по переводу сокета в неблокирующий режим, но для этого нужно иметь валидный дескриптор сокета. но boost::asio::ip::tcp::socket получает валидный дескриптор только после коннекта. X>есть идеи?
подключаюсь к некоторому серверу, который в данный момент не "слушает" порт, и получаю connection timed out спустя 5 минут.
расстраивает то, что нужно ждать аж пять минут.
в гугле есть решения по переводу сокета в неблокирующий режим, но для этого нужно иметь валидный дескриптор сокета. но boost::asio::ip::tcp::socket получает валидный дескриптор только после коннекта.
т.е. этот код работать не будет до тех пор, пока не подключишься:
Здравствуйте, antropolog, Вы писали:
A>давай ты начнёшь с того, что расскажешь, зачем ты хочешь перевести сокет в неблокирующий режим.
начинать нужно с тебя.
показывай, как ты используешь мертвый сокет(т.е. -1) и какой от этого профит?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[6]: asio, tcp socket, async_connect() и 'connection timed ou
Здравствуйте, antropolog, Вы писали:
X>>возьми дескриптор у неподключенного сокета и поработай с ним, о понимающий... A>давай ты начнёшь с того A>давай ты начнёшь с того A>давай ты начнёшь с того
Я понимаю, что это злостный оффтопик, но мне кажется, что в обсуждении отчаянно не хватает фразы "православное кадило"
Таймаут по умолчанию обычно составляет примерно 72 секунды, это 5 отправок SYN с увеличивающимся интервалом ожидания ответа SYN, ASK. Откуда у топикстартера 5 минут-то взялись? Явно что-то не системное.
Re: asio, tcp socket, async_connect() и 'connection timed out' спустя 5 минут
Здравствуйте, niXman, Вы писали:
X>подключаюсь к некоторому серверу, который в данный момент не "слушает" порт, и получаю connection timed out спустя 5 минут. X>расстраивает то, что нужно ждать аж пять минут.
Здравствуйте, so5team, Вы писали:
S>Если через async_connect, то какая разница спустя какое время вы получаете ошибку?
async_connect().
дело в том, что если конкретно этот сервис(микросервисная архитектура) столь продолжительное время не может определить свое состояние — создается ситуация с неравномерной балансировкой нагрузки других, зависящих от этого(этих. их несколько.) сервисов.
повторюсь — сама ошибка меня вполне устраивает ибо она логична. не устраивает именно время получения этой ошибки.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, netch80, Вы писали:
N>Есть: прочитать чуть дальше доку про open().
да, про open() я не подумал... и вообще никогда его не использовал.
проверю в понедельник, отпишусь.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: asio, tcp socket, async_connect() и 'connection timed out' спустя 5 минут
Здравствуйте, niXman, Вы писали:
S>>Если через async_connect, то какая разница спустя какое время вы получаете ошибку?
X>async_connect().
X>повторюсь — сама ошибка меня вполне устраивает ибо она логична. не устраивает именно время получения этой ошибки.
Тогда не понятно, в чем ваша проблема: вы делаете async_connect, имеете возможность продолжать работу, пока операция connect выполняется асинхронно, так что зачем вам нужно еще что-то неблокирующее от сокета -- не понятно. Нужно сократить время? Ну так уже посоветовали выставить тайм-аут на время, которое вас устраивает.
Re[4]: asio, tcp socket, async_connect() и 'connection timed out' спустя 5 минут
Здравствуйте, so5team, Вы писали:
S>Тогда не понятно, в чем ваша проблема: вы делаете async_connect, имеете возможность продолжать работу, пока операция connect выполняется асинхронно, ...
описал же выше.
никакую работу этот тип сервиса выполнять не может пока не подключится к другому сервису. а так как он столь продолжительное время находится в неопределенном состоянии — балансировщик(для сервисов этого типа) не может принять решение изменить распределение нагрузки, потому что с его стороны с нодой все ок.
возможно тут и архитектурная ошибка, ибо балансировщик ничего не знает про то, что у ноды может быть состояние подключения, особено столь продолжительное...
вариант с таймером — самый очевидный. но я хотел покурить в сторону системного API, етц...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: asio, tcp socket, async_connect() и 'connection timed out' спустя 5 минут
Здравствуйте, niXman, Вы писали:
X>подключаюсь к некоторому серверу, который в данный момент не "слушает" порт, и получаю connection timed out спустя 5 минут.
Перед подключением проверь доступность порта. Гуглить icmp и raw sockets.
Re[2]: asio, tcp socket, async_connect() и 'connection timed ou
Здравствуйте, Слава, Вы писали:
С>Восхитительный пример для недавней темы "Поугараем над С++". То, что есть в чистом socket api уже десятилетия, до сих пор отсутствует в чудо-библиотеках с пространствами имён вида "boost::asio::ip::tcp::socket"
Ты внутрь то загляни.
Re: asio, tcp socket, async_connect() и 'connection timed out' спустя 5 минут
Здравствуйте, niXman, Вы писали:
X>привет!
X>подключаюсь к некоторому серверу, который в данный момент не "слушает" порт, и получаю connection timed out спустя 5 минут. X>расстраивает то, что нужно ждать аж пять минут.
Я пару дней назад страдал тем же, но синхронно, но в этом случае, если сервер не слушает, я получаю исключение/ошибку почти сразу. Если в вашем случае такая проблема только при асинхронном коннекте, можно первым делом сделать синхронный коннект в качестве проверки доступности узла, отключиться и подключиться уже как нужно. Напоминает ржавый железнодорожный костыль, но может сработать