在保持发送结束存活的同时关闭套接字的读取结束

时间:2010-12-18 07:09:15

标签: c sockets tcp

我有一台接收和发送数据的服务器。

当我关闭服务器时,我希望停止接收数据,但希望保持发送活动状态,以便发送缓冲区中的数据。

在setsockopt期间是否有任何参数设置,任何其他选项,因为关闭套接字将关闭发送和接收。

谢谢,

3 个答案:

答案 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)上,发送方将永远保持快速写入,这可能是最好的实现,但它会浪费带宽。