我有一台接收和发送数据的服务器。
当我关闭服务器时,我希望停止接收数据,但希望保持发送活动状态,以便发送缓冲区中的数据。
在setsockopt期间是否有任何参数设置,任何其他选项,因为关闭套接字将关闭发送和接收。
谢谢,
答案 0 :(得分:3)
您可以使用shutdown()
功能执行此操作。来自man 2 shutdown
:
概要
#include <sys/socket.h> int shutdown(int s, int how);
说明
shutdown()调用导致全部或部分全双工连接 与s关联的套接字将被关闭。如果SHUT_RD如何,进一步 接收将被禁止。如果SHUT_WR如何,则进一步发送 不允许。如果SHUT_RDWR如何,进一步发送和接收将是 允许的。
答案 1 :(得分:0)
您可以在套接字功能中使用shutdown()来实现此目的。
答案 2 :(得分:0)
'希望保持发送活动以便 缓冲区中的数据被发送。'。
数据在什么缓冲区?你的输出流或作者?关闭它。它将被发送。
如果您指的是套接字发送缓冲区,则更不用担心。
shutdown()解决方案在其他(发送)端具有与平台相关的效果。在某些平台(Windows)上,发件人将获得“连接重置”。在其他平台(Linux)上,发送方将填充接收方的接收缓冲区和自己的发送缓冲区并最终停止。在其他平台(BSD)上,发送方将永远保持快速写入,这可能是最好的实现,但它会浪费带宽。