Разработка сокетов под Linux - PullRequest
0 голосов
/ 17 марта 2012

Моя окружающая среда:

  1. Linux, Ubuntu
  2. C ++ / GDB
  3. Затмение

Я реализую приложение сервера сокетов TCP.
Во время разработки / отладки приложение может завершиться после того, как соединение было принято, и до того, как открытые сокеты были корректно закрыты и закрыты. В таком случае при следующем выполнении приложения не удастся выполнить привязку к порту прослушивания, только через минуту или около того снова будет выполнено связывание.

Я предполагаю, что ядро ​​Linux имеет некоторый механизм очистки для ~ сбора ~ всех сокетов, которые не были корректно отключены, объясняя, почему я должен ждать ~ 1 минуту, прежде чем порт снова станет подключаемым.

Сказав это, есть ли способ избежать этого 1-минутного ожидания? Есть ли способ заставить ОС собрать все сокеты, которые не были корректно закрыты?

Любая помощь будет оценена.

Надав у Софина

1 Ответ

4 голосов
/ 17 марта 2012

Конечно, просто установите параметр уровня SO_REUSEADDR SOL_SOCKET в сокете.

int yes = 1;
if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes))
    perror("setsockopt");
...