假设我有那个使用套接字的应用程序。
服务器应用程序读取一些数据并对其进行处理,然后服务器突然意识到读取的数据有问题。
现在,读取将被中止,客户端发送的所有内容都将被丢弃。
有没有我可以调用的套接字函数来实现这一点?还是我必须read()
直到插座中没有任何东西为止?
我不想关闭套接字。只需删除待处理的数据。
如果您想丢弃所有数据并立即中止连接,那么您可以设置SO_LINGER
选项和close
.
setsockopt(fd, SOL_SOCKET, SO_LINGER,
&(struct linger){.l_onoff=1, l_linger=0}, sizeof(struct linger));
这将立即重置连接(它将发送一个 RST 段)。
但是,如果您想抛出一些数据并保持连接,这可能是不可行的。没有 API(据我所知)告诉内核:“忽略接下来的 100 个字节:我不想read
解除对它们的阻塞”。所以你只需要打电话read
,直到你决定数据再次可用。