LinuxForum.Fans
Тема

Кончаются сокеты в системе

Автор: chuk 10 сообщений 1675 просмотров
#283482

Имеется TCP-сервер. К нему коннектятся клиенты, идет обмен данными и разрыв коннекта.
После некоторого количество сеансов связи сервер перестает принимать соединения. Похоже, что в системе кончаютя сокеты, хотя моя программа их закрывает.

В файле /proc/net/tcp видно большое количество сокетов. Примерно через минуту эти сокеты пропадают из /proc/net/tcp и сервер продолжает работу.

Debian Lenny
uname -a
Linux ivan 2.6.26-2-686 #1 SMP Sat Jun 11 14:54:10 UTC 2011 i686 GNU/Linux

#283490

На чем пишете приложение?

#283491

C++, QT 4.7.0

#283500

Может быть вы удаляете некие объекты при помощи deleteLater()? И они ждут когда будет время а удаление.... Судя по расходу сокетов - как то у вас нагрузка большая. Может так и получается, что deleteLater() отрабатывает с большим опозданием

#283504

Попробуйте отловить сигнал error, может что полезного выплюнет.

#283508

Разве QTCPServer имеет сигнал ошибки?
С обменом по QTCPSocket ошибок не возникает.
На клиенте (когда кончаются сокеты) при вызове connectToHost() обьект просто не переходит в состояние QAbstractSocket::ConnectingState, без ошибок.

#283572
voral написал:
Может быть вы удаляете некие объекты при помощи deleteLater()?

Удаляю просто delete, и закрываю явно.

Если верить статье http://xn--80ae9aggj.xn--p1ai/2009/01/19/tcp-time-wait/
то так и должно быть, сокеты действительно остаются с системе на некоторое время после закрытия соединения, и держат занятами порты.
Только тогда не ясно, как же пишут высоконагруженные серверы с тысячами коннектов в секунду...

#283609

Спасибо! буду читать.

Войдите или зарегистрируйтесь, чтобы ответить.