首页 > 解决方案 > 应该关闭损坏的套接字吗?

问题描述

我正在读取 TCP 套接字:

int read_result = recv(socket_fd, &some_struct, some_size, 0);

如果read_result等于-1,我应该仍然调用close该文件描述符还是离开它?

标签: csocketstcp

解决方案


根据recv手册页,有许多recv可能返回的原因-1(EAGAIN、EBADF、EINVAL、ENOMEM 等)。我建议检查errno这些预期的返回值并修改你的代码以采取相应的行动。如果您正在编写库,您可能希望返回特定于库的错误代码。如果您是应用程序,您可能希望死掉或向调用者返回错误代码。这将取决于上下文。

然而,解决这个问题的第一步是了解可以返回的各种错误代码并相应地处理它们。


推荐阅读