powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как часто можно открывать TCP сокет?
16 сообщений из 16, страница 1 из 1
Как часто можно открывать TCP сокет?
    #39788166
zvb73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно опрашивать некое устройство по TCP раз в секунду. Запрос и ответ по 40 байт.
На клиентской стороне Raspberry, Linux, Qt, QTcpSocket. Условия связи плохие, бывают помехи.
Как лучше поступить - открывать сокет перед каждой посылкой и закрывать после обмена
или открыть один раз и обмениваться пока не произойдёт ошибка, потом переоткрывать.
Второй вопрос по линуксу - при открытии COM-порта, например, создаётся файл с дескриптором.
Может быть то же самое происходит при открытии сокета? Тогда это может быть не полезно
для флешки, на которой стоит линукс.
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788171
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет смысла каждый раз соединение устанавливать. Достаточно один раз установить и через него запросы слать. Если порвется, то установить заново.
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788173
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvb73Второй вопрос по линуксу - при открытии COM-порта, например, создаётся файл с дескриптором.
Может быть то же самое происходит при открытии сокета? Тогда это может быть не полезно
для флешки, на которой стоит линукс.
Думаю что не создается. А за флэшку не переживай, у современной флэш-памяти ресурс огромный, все проблемы с малым количеством циклов перезаписи в далеком прошлом.
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788372
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvb73Как лучше поступить - открывать сокет перед каждой посылкой и закрывать после обмена
или открыть один раз и обмениваться пока не произойдёт ошибка, потом переоткрывать.
Лучше открывать как можно реже.
Потому что в типичной системе количество локальных TCP портов ограничено (несколько тысяч, максимум 65 тыс), а каждое соединение расходует один локальный порт, который потом освобождается не сразу, а через 2 минуты (читайте про TCP time_wait).
Поэтому при достаточно частых запросах, будет ситуация когда вы не сможете создать новое соединение, т.к. все порты будут в time_wait.

Хотя раз в секунду - это конечно не те скорости, чтобы эта проблема возникла :)
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788391
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyлокальный порт, который потом освобождается не сразу, а через 2 минуты

Только если соединение закрывается некорректно, без вызова shutdown() на обоих сторонах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788424
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Нет.
Timewait возникает в любом случае на той стороне которая разрывает соединение.
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788485
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyTimewait возникает в любом случае на той стороне которая разрывает соединение.

У меня не возникает. Единственное назначение этого состояния - не позволить перемешаться
пакетам двух разных подключений, поскольку они взаимоидентифицируются четвёркой "локальный
адрес+локальный порт+удалённый адрес+удалённый порт" из заголовка пакета. Если обе стороны
подключения были закрыты корректно и fin-пакеты прошли, то сокет выводится из этого
состояния и порт освобождается без дальнейшего ожидания таймаута.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788488
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у Стивенса в 13-й главе всё подробно расписано
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788496
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAnatoly MoskovskyTimewait возникает в любом случае на той стороне которая разрывает соединение.

У меня не возникает. Единственное назначение этого состояния - не позволить перемешаться
пакетам двух разных подключений, поскольку они взаимоидентифицируются четвёркой "локальный
адрес+локальный порт+удалённый адрес+удалённый порт" из заголовка пакета. Если обе стороны
подключения были закрыты корректно и fin-пакеты прошли, то сокет выводится из этого
состояния и порт освобождается без дальнейшего ожидания таймаута.
Стороне, которая отправила последний ACK на последний FIN, неизвестно, дошел ли этот ACK. И она ждет возможного ретрансмита FIN чтобы снова отправить ACK.
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788524
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovУ меня не возникает.
То что разными настройками ОС можно влиять на TW (в т.ч. игнорировать) никак не отменяет того факта, что это стандартное и нормальное состояние сокета.
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788559
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТо что разными настройками ОС можно влиять на TW (в т.ч. игнорировать) никак не отменяет
того факта, что это стандартное и нормальное состояние сокета.

Настройки у меня стандартны, фишка именно в правильном протоколе завершения соединения:
1) shutdown(SD_SEND)
2) recv() до получения 0
3) shutdown(SD_BOTH)
4) closesocket()

Пропуск первого или третьего пункта (а возможно и второго) оставляет висячий TIME_WAIT.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788570
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov2) recv() до получения 0
Т.е. вы ждете пока вторая сторона разорвет соединение.
Тогда естественно timewait будет не у вас, а с той стороны
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788585
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТогда естественно timewait будет не у вас, а с той стороны

Во-первых, этот протокол должен выполняться с обеих сторон.
Во-вторых, time_wait в принципе бывает только на одной стороне - той, которая
устанавливает соединение, ибо только она использует эфемерные порты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788606
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВо-первых, этот протокол должен выполняться с обеих сторон.
Во-вторых, time_wait в принципе бывает только на одной стороне - той, которая
устанавливает соединение, ибо только она использует эфемерные порты.
Нет. time_wait на серверной стороне точно так же возникает. И повторно клиент с тем же портом туда не подключится пока time_wait не закончится, даже если у клиента time_wait не было.
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788624
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAnatoly MoskovskyТогда естественно timewait будет не у вас, а с той стороны

Во-первых, этот протокол должен выполняться с обеих сторон.
Во-вторых, time_wait в принципе бывает только на одной стороне - той, которая
устанавливает соединение, ибо только она использует эфемерные порты.
Вообще никак не зависит от того, кто устанавливает соединение. Только от того, кто первым разрывает (точнее, кто последний послал ACK).
...
Рейтинг: 0 / 0
Как часто можно открывать TCP сокет?
    #39788626
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAnatoly MoskovskyТо что разными настройками ОС можно влиять на TW (в т.ч. игнорировать) никак не отменяет
того факта, что это стандартное и нормальное состояние сокета.

Настройки у меня стандартны, фишка именно в правильном протоколе завершения соединения:
1) shutdown(SD_SEND)
2) recv() до получения 0
3) shutdown(SD_BOTH)
4) closesocket()

Пропуск первого или третьего пункта (а возможно и второго) оставляет висячий TIME_WAIT.
time_wait тут начинается после 2 пункта
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как часто можно открывать TCP сокет?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]