Завершение соединения между клиентом и сервером, после завершения процесс висит еще некоторое время |
Здравствуйте, гость ( Вход | Регистрация )
Завершение соединения между клиентом и сервером, после завершения процесс висит еще некоторое время |
pawok11 |
5.2.2010, 17:24
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 5.2.2010 Пользователь №: 1445 Спасибо сказали: 0 раз(а) Репутация: 0 |
Запущен QTcpServer. На каждое входящее сообщение запускается свой поток обработки QThread, в котором вызывается QTcpSocket. После окончания обмена данными QTcpSocket закрывается
и поток закрывается, связанный сигналом
Слот срабатывает, все отрабатывается. Теперь если под виндой запустить netstat -a -o получаю вот такое Имя Локальный адрес Внешний адрес Состояние PID ... TCP comp:6090 comp:6510 TIME_WAIT 0 и соединение будет еще висеть где-то 1,5 мин. Сервер работает с разными клиентами и при обмене с каждым по несколько раз в секунду, такого рода процессы накапливаются и висят, пока не отваливаются где-то через 1.5 минуты. Как сделать так чтобы этот процесс сразу же пропадал после завершения потока QThread? |
|
|
kwisp |
7.2.2010, 13:21
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
pawok11,
есть подобня проблема уже давно и у меня. походу это не винда и не qt это стандарт TCP/IP называется "залипание" или как то так. по-моему около 2 минут. все как ты и говоришь. П.С. соответственно мы решения не нашли. Сообщение отредактировал kwisp - 7.2.2010, 13:22 |
|
|
pawok11 |
8.2.2010, 11:52
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 5.2.2010 Пользователь №: 1445 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата Скорее всего не 1.5 минуты, а 2 (еще точнее 2MSL). Все нормально, так и должно быть. Подробности кроются в работе TCP-стеке. И уменьшать это время не стоит, т.к. могут начаться глюки с новыми сетевыми соединениями. подсказал BRE |
|
|
azure |
9.2.2010, 16:03
Сообщение
#4
|
Студент Группа: Участник Сообщений: 60 Регистрация: 24.12.2009 Пользователь №: 1332 Спасибо сказали: 5 раз(а) Репутация: 0 |
Как сделать так чтобы этот процесс сразу же пропадал после завершения потока QThread? Главный вопрос: зачем? Это делает операционная система с целью снижения нагрузки на стек tcp/ip (для облегчения установления новых соединений). Держится соединене в таком состоянии 2 минуты по умолчанию. |
|
|
Текстовая версия | Сейчас: 27.12.2024, 3:40 |