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

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

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

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

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

У меня не возникает. Единственное назначение этого состояния - не позволить перемешаться
пакетам двух разных подключений, поскольку они взаимоидентифицируются четвёркой "локальный
адрес+локальный порт+удалённый адрес+удалённый порт" из заголовка пакета. Если обе стороны
подключения были закрыты корректно и fin-пакеты прошли, то сокет выводится из этого
состояния и порт освобождается без дальнейшего ожидания таймаута.
Стороне, которая отправила последний ACK на последний FIN, неизвестно, дошел ли этот ACK. И она ждет возможного ретрансмита FIN чтобы снова отправить ACK.
...
Рейтинг: 0 / 0
19.03.2019, 15:55
    #39788524
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как часто можно открывать TCP сокет?
Dimitry SibiryakovУ меня не возникает.
То что разными настройками ОС можно влиять на TW (в т.ч. игнорировать) никак не отменяет того факта, что это стандартное и нормальное состояние сокета.
...
Рейтинг: 0 / 0
19.03.2019, 17:15
    #39788559
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как часто можно открывать TCP сокет?
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
19.03.2019, 17:41
    #39788570
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как часто можно открывать TCP сокет?
Dimitry Sibiryakov2) recv() до получения 0
Т.е. вы ждете пока вторая сторона разорвет соединение.
Тогда естественно timewait будет не у вас, а с той стороны
...
Рейтинг: 0 / 0
19.03.2019, 18:10
    #39788585
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как часто можно открывать TCP сокет?
Anatoly MoskovskyТогда естественно timewait будет не у вас, а с той стороны

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

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

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

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


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