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