在 Linux 中,优雅地关闭 socket 连接需要遵循以下步骤:
- 关闭写操作:使用
shutdown()
函数关闭写操作。这将发送一个 FIN 包给对方,表示你已经完成了发送数据。
shutdown(sockfd, SHUT_WR);
- 读取剩余数据:在关闭写操作后,继续从 socket 中读取数据,直到收到对方的 FIN 包。这样可以确保你已经接收到了对方发送的所有数据。
char buffer[1024]; while (1) { ssize_t recv_len = recv(sockfd, buffer, sizeof(buffer), 0); if (recv_len <= 0) { break; } // 处理接收到的数据 }
- 关闭 socket:使用
close()
函数关闭 socket。这将释放与 socket 相关的所有资源。
close(sockfd);
注意:在实际编程中,你可能需要处理错误情况,例如 shutdown()
、recv()
和 close()
函数调用失败的情况。在这些情况下,你应该根据错误代码进行适当的错误处理。
通过遵循这些步骤,你可以优雅地关闭 Linux 中的 socket 连接,确保数据的完整性和正确性。