c - C 中的套接字 : Proper way to close socket

标签 c sockets server

我经常看到使用套接字的服务器程序的示例代码。

(为简单起见,这里我不检查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-closure-sockfd 会导致绑定(bind)错误(例如,此套接字正在使用中......)。

如果你能帮助我,我真的很感激。 感谢您的宝贵时间。

最佳答案

如果程序退出,现代操作系统将自动释放应用程序分配的资源,如内存或打开的文件描述符(包括套接字)。因此,如果服务器套接字应该在整个程序中都可用(以便接受连接),则可以不显式关闭它,而是让操作系统在应用程序退出时执行此操作。

关于c - C 中的套接字 : Proper way to close socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53237845/

相关文章:

c - 使用定义不同于内部使用的外部头文件

在 C 中将负 int 转换为更大的无符号 int

c - 在C中使用 'select()'为多客户端进行套接字编程

javascript - 我可以在一台服务器上运行 2 个进程吗,一个用于监听请求,另一个在某些数据存储上处于轮询循环中

c - C中多线程后服务器上的段错误

python - python中如何操作C函数返回的C类型指针?

c++ - 为什么使用私有(private)动态数组时性能最差

php - 如何在 php 中处理 socket broken pipe [error 32]?

c++ - recv() 没有收到预期的字节数

node.js - MongoError : Topology is closed, 尽管已建立数据库连接,但请连接