Здравствуйте!Вот выдержки из серверного приложения:
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (bind(sockfd, (struct sockaddr *)&self, sizeof(self)) != 0)
exit(errno);
if (listen(sockfd, 20) != 0 )
exit(errno);
for (;;)
{
fd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen);
if (fd == -1)
break;
// Do something
close(fd);
}
}
Когда мне нужно завершить приложение, то я закрываю дескриптор sockfd из другого треда (pthread):
close(sockfd);
При этом приведенный выше бесконечный цикл завершается, после чего завершается и вся программа.
Проблема в том, что, когда я запускаю ее вновь, то функция bind(3) генерирует ошибку 98 - Address already in use. Спустя некоторое время, порядка минуты, функция bind(3) выполняется нормально.
Как мне корректно завершить работу с sockfd, чтобы избежать описанного эффекта?