Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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 - Fatal编程技术网

C 如何告诉套接字在不关闭它的情况下丢弃所有挂起的数据?

C 如何告诉套接字在不关闭它的情况下丢弃所有挂起的数据?,c,sockets,C,Sockets,假设我有一个使用套接字的应用程序 服务器应用程序读取一些数据并对其进行处理,然后服务器突然发现读取的数据有问题 现在,读取将被中止,客户端发送的所有内容都将被丢弃 是否有一个套接字函数可以调用来实现这一点?或者我必须read()直到套接字中什么都没有了吗 我不想关闭套接字。只需删除挂起的数据。如果要丢弃所有数据并立即中止连接,则可以设置以便保留选项并关闭 setsockopt(fd, SOL_SOCKET, SO_LINGER, &(struct linger){.l_onoff

假设我有一个使用套接字的应用程序

服务器应用程序读取一些数据并对其进行处理,然后服务器突然发现读取的数据有问题

现在,读取将被中止,客户端发送的所有内容都将被丢弃

是否有一个套接字函数可以调用来实现这一点?或者我必须
read()
直到套接字中什么都没有了吗


我不想关闭套接字。只需删除挂起的数据。

如果要丢弃所有数据并立即中止连接,则可以设置
以便保留
选项并
关闭

setsockopt(fd, SOL_SOCKET, SO_LINGER,
    &(struct linger){.l_onoff=1, l_linger=0}, sizeof(struct linger));
这将立即重置连接(它将发送RST段)


但是,如果您想抛出一些数据,并保持连接,这可能是不可行的。没有API(据我所知)告诉内核:“忽略接下来的100个字节:我不想
read
解除对它们的阻塞”。因此,您只需调用
read
,直到您确定数据再次可用。

@PatrickEvans:只有一个:-)更新的标记。只需将其读取到不需要的变量,直到它变为空。如果客户端向您发送垃圾,您为什么不想关闭套接字?