Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 关闭套接字的读取端,同时保持发送端活动_C_Sockets_Tcp - Fatal编程技术网

C 关闭套接字的读取端,同时保持发送端活动

C 关闭套接字的读取端,同时保持发送端活动,c,sockets,tcp,C,Sockets,Tcp,我有一台接收和发送数据的服务器 当我关闭服务器时,我希望突然停止接收数据,但希望保持发送活动,以便发送缓冲区中的数据 setsockopt和任何其他选项期间是否有任何参数需要设置,因为关闭套接字将同时关闭发送和接收 谢谢,您可以使用shutdown()功能来执行此操作。从手动2关闭: 概要 #include <sys/socket.h> int shutdown(int s, int how); #包括 int关闭(int s,int how); 描述 shutdown()

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

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

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


谢谢,

您可以使用
shutdown()
功能来执行此操作。从
手动2关闭

概要

 #include <sys/socket.h>

 int shutdown(int s, int how);
#包括
int关闭(int s,int how);
描述

shutdown()调用会导致服务器上的全部或部分全双工连接 与要关闭的s关联的套接字。如果是如何关闭的,进一步 接收将被禁止。如果如何关闭\u WR,则需要进一步发送 不允许。如果如何关闭RDWR,将显示进一步的发送和接收- 允许

您可以在套接字功能中使用shutdown()来实现这一点

'希望保持发送处于活动状态,以便 缓冲区中的数据已发送。“

数据在什么缓冲区?您的输出流或写入器?把它关上。它将被发送

如果您指的是套接字发送缓冲区,那么就更不用担心了

shutdown()解决方案在另一端(发送端)具有依赖于平台的效果。在某些平台(Windows)上,发件人将获得“连接重置”。在其他平台(Linux)上,发送方将填充接收方的接收缓冲区和他自己的发送缓冲区,并最终暂停。在其他平台(BSD)上,发送方将永远愉快地编写,这可能是最好的实现,但它会浪费带宽