【发布时间】:2017-09-08 04:45:41
【问题描述】:
所以让我简化我正在处理的代码:
int fd = socket(...);
int client = accept(fd, ...);
while (true) {
int bytes_read = recv(client, ...);
if (bytes_read == 0) {
break;
}
};
此时我已经知道客户端已断开连接(recv 返回 0)。但是我还需要打电话吗
close(client);
?
【问题讨论】:
-
好吧,我认为您需要这样做,因为 [我认为] 由于您没有关闭文件描述符,因此会造成内存泄漏。
-
如果你不调用 close(),并继续创建新的套接字(例如通过 accept()),那么最终你的进程的套接字表将被剩余的套接字填满,然后你的进程就赢了'不能再创建了,所以accept()、socket()等都会因为errno=EMFILE而失败,然后你的程序就不能再正常工作了:(