Я часто вижу примеры кодов для серверной программы, использующей сокет.
(для простоты здесь я не проверяю возвращаемые значения функций, таких как socket () или bind () и т. Д.)
int sockfd = 0, newsockfd = 0;
struct sockaddr_in address;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bind(sockfd, (struct sockaddr*)&address, sizeof(address));
listen(sockfd, 1);
newsockfd = accept(sockfd, (struct sockaddr*)NULL, NULL);
... do some communication ...
close(newsockfd);
Большинство примеров кодов, которые я нашел в Интернете, имеют close (newsockfd) , но не имеют close (sockfd) .Мой вопрос: действительно ли правильно НЕ закрывать sockfd .
Если это правильно, я хочу знать почему.Насколько я понимаю, sockfd является одним из дескрипторов файлов, и, похоже, у него нет причин выходить из программы, не закрывая его.
В частности, мне интересно, что not-closed-sockfd может вызвать ошибку связывания (например, этот сокет уже используется ...) когда программа будет работать в следующий раз.
Я очень признателен, если вы мне поможете.Спасибо за ваше время.