Я пишу приложение WebSocket с помощью библиотеки Boost :: Beast.Я использую синхронные вызовы (например, websocket :: stream :: write ) для записи данных в открытый поток.
Я хотел бы сделать соединение максимально надежным,и, следовательно, отбросить все сообщения, которые не могли быть доставлены, например, из-за потери соединения.Кажется, что вызов websocket::stream::write
завершается успешно, даже если я отключаю интернет от компьютера перед тем, как позвонить, если до этого я успешно подключался к принимающему серверу WebSocket.Он возвращает длину «отправленного» сообщения и без кода ошибки, но на самом деле сообщение доставляется только после того, как я снова подключусь к Интернету (очевидно).Я предполагаю, что он застрял на каком-то нижнем уровне, поскольку его пока нельзя транспортировать, но boost :: beast не может это обнаружить.Могу ли я так или иначе установить таймер для тайм-аута исходящих сообщений, даже если я использую библиотеку более высокого уровня, например, beast?Может ли этот блок websocket::stream::write
блокироваться до тех пор, пока сообщение действительно не будет отправлено и оно фактически не застрянет в каком-либо буфере транспортного уровня?Я боюсь, что буфер, в котором хранятся ожидающие сообщения для доставки на нижнем уровне, будет заполнен, если они не будут удалены, или тогда сеть переполнится, если огромное количество ожидающих сообщений будет доставлено после повторного подключения к ПК.сеть.
У зверя, похоже, есть какие-то таймауты , но они предназначены только для асинхронного ввода-вывода.