我有一个正在侦听stdin(用户)和其他客户端的服务器。
假设服务器连接到许多客户端(使用select
来控制所有文件描述符),用户在终端中输入EXIT。这意味着服务器应该自行关闭。
正常关闭服务器的正确方法是什么?服务器应该通过所有文件描述符和所有文件描述符close(fd)
还是只关闭listener
fd?或者,我不应该关闭任何东西,让服务器进程完成并退出吗?
我在程序中只使用了一个线程。
谢谢。
答案 0 :(得分:4)
关闭监听器fd
意味着不再接受任何连接。处理这个的最好方法是:
关闭进程会自动关闭其所有打开的文件描述符。在退出之前告诉所有人关闭只是为了方便,以免突然关闭连接。
答案 1 :(得分:2)
对于“正常断开连接”,您还应该调用shutdown(fd, SHUT_RDWR);
(shutdown()),以便在关闭()套接字之前确保发送和接收所有数据。
另外,如果您在Linux下工作,可以考虑使用epoll而不是选择。