The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"FreeBSD и много сокетов со статусом CLOSED. Как побороть?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Др. сетевые сервисы / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"FreeBSD и много сокетов со статусом CLOSED. Как побороть?"  +/
Сообщение от Victor email(??) on 08-Ноя-11, 15:32 
Прошу прощения за возможно нелепый вопрос. Но такая ситуация:
пробую писать маленькое приложение, принимающее соединения по tcp, для проверки на него отсылаю данные из другой программки. Все работает хорошо, за исключением одного момента:
после каждого сеанса связи остаются соединения со статусом CLOSED. И их с каждям разом становится больше.

# netstat -na | grep 1900 | grep CLOSED | head
tcp4       0      0 172.30.0.1.1900        172.30.0.1.38508       CLOSED
tcp4       0      0 172.30.0.1.1900        172.30.0.1.38503       CLOSED
tcp4       0      0 172.30.0.1.1900        172.30.0.1.38496       CLOSED
tcp4       0      0 172.30.0.1.1900        172.30.0.1.38484       CLOSED
tcp4       0      0 172.30.0.1.1900        172.30.0.1.38479       CLOSED
tcp4       0      0 172.30.0.1.1900        172.30.0.1.38474       CLOSED
tcp4       0      0 172.30.0.1.1900        172.30.0.1.38466       CLOSED
tcp4       0      0 172.30.0.1.1900        172.30.0.1.38461       CLOSED
tcp4       0      0 172.30.0.1.1900        172.30.0.1.38456       CLOSED
tcp4       0      0 172.30.0.1.1900        172.30.0.1.38447       CLOSED
# netstat -na | grep 1900 | grep CLOSED | wc -l
     249

В связи с чем у меня вопросы:
1. Что мне нужно подправить в программах, чтобы эти сокеты быстрее исчезали из вывода netstat ?
2. Есть ли какой-нибудь sysctl, который позволит убирать такие соединения побыстрее (может, таймаут какой существует на присутсвие таких сокетов)?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "FreeBSD и много сокетов со статусом CLOSED. Как побороть?"  +/
Сообщение от cryo (ok) on 08-Ноя-11, 20:58 
Прям в соседней теме на опеннете:

---
TIME_WAIT

После того как соединение закрывается сокет переходит в состояние TIME_WAIT
В этом состоянии он может находится по умолчанию в течение 60 секунд.
Время можно изменить через sysctl (в миллисекундах деленных на 2, 2 x 30000 MSL = 60 секунд):

sysctl net.inet.tcp.msl=30000
---

см. http://www.opennet.me/base/net/tune_freebsd.txt.html


Поставь секунд 5-10 - сразу полегчает.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "FreeBSD и много сокетов со статусом CLOSED. Как побороть?"  +/
Сообщение от Victor email(??) on 09-Ноя-11, 09:43 
> см. http://www.opennet.me/base/net/tune_freebsd.txt.html
> Поставь секунд 5-10 - сразу полегчает.

Поставил
sysctl net.inet.tcp.msl=3000

не полегчало :)

Пошел искать дальше, нарыл ссылку на http://www.ibm.com/developerworks/systems/library/es-nweb/in..., посмотрел там код и добавил себе закрытие сокетов после fork() в новом и родительском потоках:


if((fd = accept(sockfd, (struct sockaddr *) &sa, &n)) != -1) {
/* принимаем соединение */
  if(!fork()) { /* обрабатываем в новом потоке */
    (void)close(sockfd); // добавил по примеру из ibm
    operate(fd, sadr);
  }
  else {
    (void)close(fd); // добавил по примеру из ibm
  }
}


Полегчало сильно - больше таких сокетов не висит совсем.

Спасибо за помощь.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру