QTcpServer и останов сетевого интерфейса
От: B0FEE664  
Дата: 18.08.22 13:57
Оценка:
Допустим я создал объект QTcpServer и стал слушать порт:
...
listen(serverIp, port)
...
и всё работает как надо.

Вопрос, что будет если во время работы происходит переконфигурирование сети, например командами:
ifconfig eth0 down
...
ifconfig eth0 up

Как корректно отследить такое из приложения? Нужно ли вызывать close() ... listen()?
И каждый день — без права на ошибку...
Re: QTcpServer и останов сетевого интерфейса
От: Igore Россия  
Дата: 21.08.22 14:34
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Вопрос, что будет если во время работы происходит переконфигурирование сети, например командами:

BFE>ifconfig eth0 down
BFE>...
BFE>ifconfig eth0 up

BFE>Как корректно отследить такое из приложения?


Попробуй через https://doc.qt.io/qt-6/qnetworkinformation.html отследить
Re: QTcpServer и останов сетевого интерфейса
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.08.22 00:36
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Вопрос, что будет если во время работы происходит переконфигурирование сети, например командами:

BFE>ifconfig eth0 down
BFE>...
BFE>ifconfig eth0 up

Да ничего, скорее всего, не будет. Пока интерфейс в дауне, новые соединения перестанут приходить. А потом опять начнут.

BFE>Как корректно отследить такое из приложения? Нужно ли вызывать close() ... listen()?


А что значит "корректно"? Какого именно поведения ты хочешь добиться?
Re[2]: QTcpServer и останов сетевого интерфейса
От: B0FEE664  
Дата: 29.08.22 13:27
Оценка:
Здравствуйте, Pzz, Вы писали:

BFE>>Вопрос, что будет если во время работы происходит переконфигурирование сети, например командами:

Pzz>Да ничего, скорее всего, не будет. Пока интерфейс в дауне, новые соединения перестанут приходить. А потом опять начнут.
Вот сомневаюсь я...

BFE>>Как корректно отследить такое из приложения? Нужно ли вызывать close() ... listen()?

Pzz>А что значит "корректно"? Какого именно поведения ты хочешь добиться?
Допустим я слушал порт на неком адресе и интерфейсе...
Если этот интерфейс "загасили", то хотелось бы прописать в лог, что вот с такого-то момента входящее соединение было невозможно.
Если интерфейсу поменяли адрес, то хотелось бы об этом узнать и не пытаться дальше слушать порт на не верном адресе.
И каждый день — без права на ошибку...
Re[3]: QTcpServer и останов сетевого интерфейса
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.08.22 16:04
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>>>Вопрос, что будет если во время работы происходит переконфигурирование сети, например командами:

Pzz>>Да ничего, скорее всего, не будет. Пока интерфейс в дауне, новые соединения перестанут приходить. А потом опять начнут.
BFE>Вот сомневаюсь я...

Проверь.

BFE>Допустим я слушал порт на неком адресе и интерфейсе...

BFE>Если этот интерфейс "загасили", то хотелось бы прописать в лог, что вот с такого-то момента входящее соединение было невозможно.
BFE>Если интерфейсу поменяли адрес, то хотелось бы об этом узнать и не пытаться дальше слушать порт на не верном адресе.

А тебе обязательно зачем-то надо слушать на определенном интерфейсе? Можно ведь по нулевому адресу слушать, что означает, слушать на всех интерфейсах (вернее, на всех локальных адресах).
Re[3]: QTcpServer и останов сетевого интерфейса
От: DiPaolo Россия  
Дата: 29.08.22 16:45
Оценка:
BFE>Если этот интерфейс "загасили", то хотелось бы прописать в лог, что вот с такого-то момента входящее соединение было невозможно.
BFE>Если интерфейсу поменяли адрес, то хотелось бы об этом узнать и не пытаться дальше слушать порт на не верном адресе.

Qt такого не предоставляет. Разве что ошибку выдаст.

Можно сделать такое руками https://stackoverflow.com/questions/579783/how-to-detect-ip-address-change-programmatically-in-linux/2353441#2353441.
Патриот здравого смысла
Re: QTcpServer и останов сетевого интерфейса
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.08.22 16:49
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Как корректно отследить такое из приложения? Нужно ли вызывать close() ... listen()?


А сокеты вообще такое могут отследить? Ошибку, там, какую-то вернуть?
Маньяк Робокряк колесит по городу
Re[2]: QTcpServer и останов сетевого интерфейса
От: B0FEE664  
Дата: 30.08.22 10:15
Оценка:
Здравствуйте, Marty, Вы писали:

BFE>>Как корректно отследить такое из приложения? Нужно ли вызывать close() ... listen()?

M>А сокеты вообще такое могут отследить? Ошибку, там, какую-то вернуть?

Вопрос не про сокеты. Вопрос про QTcpServer.
И каждый день — без права на ошибку...
Re[4]: QTcpServer и останов сетевого интерфейса
От: B0FEE664  
Дата: 30.08.22 10:23
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Да ничего, скорее всего, не будет. Пока интерфейс в дауне, новые соединения перестанут приходить. А потом опять начнут.

BFE>>Вот сомневаюсь я...
Pzz>Проверь.
Проверить то я могу, но проверка займёт два-три дня...
Собственно проверкой заниматься не охота, но раз никто не знает — придётся.

Pzz>А тебе обязательно зачем-то надо слушать на определенном интерфейсе? Можно ведь по нулевому адресу слушать, что означает, слушать на всех интерфейсах (вернее, на всех локальных адресах)

Мне надо слушать на локальном адресе, чтобы извне не было видно.
И каждый день — без права на ошибку...
Re[5]: QTcpServer и останов сетевого интерфейса
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.08.22 10:50
Оценка:
Здравствуйте, B0FEE664, Вы писали:

Pzz>>А тебе обязательно зачем-то надо слушать на определенном интерфейсе? Можно ведь по нулевому адресу слушать, что означает, слушать на всех интерфейсах (вернее, на всех локальных адресах)

BFE>Мне надо слушать на локальном адресе, чтобы извне не было видно.

Мониторить состояние интерфейсов можно, но муторно.

У тебя что за ОСь? Можно сделать по-другому, после accept() говорить getpeerbyname(), проверять его локальность, и если не, сразу бросать соединение с SO_LINGER == 0. С внешней стороны будет не особо-то и различимо.

Могу подстазать, как проверить локальность адреса в зависимости от ОСи.

Вот здесь я примерно так и делаю, чтобы не возиться с мониторингом интерфейсов: https://github.com/OpenPrinting/ipp-usb/blob/master/listener.go

Но только там я пропускаю только 127.0.0.1 и его IPv6 эквиавалент

Извини, что на Go.
Re[3]: QTcpServer и останов сетевого интерфейса
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.08.22 12:15
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>>>Как корректно отследить такое из приложения? Нужно ли вызывать close() ... listen()?

M>>А сокеты вообще такое могут отследить? Ошибку, там, какую-то вернуть?

BFE>Вопрос не про сокеты. Вопрос про QTcpServer.


Если сокеты емуют в ошибку, то, по идее, Qt должно её обрабатывать
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.