0

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

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

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

有没有我可以调用的套接字函数来实现这一点?还是我必须read()直到插座中没有任何东西为止?

我不想关闭套接字。只需删除待处理的数据。

4

1 回答 1

2

如果您想丢弃所有数据并立即中止连接,那么您可以设置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,直到你决定数据再次可用。

于 2013-09-20T09:40:41.700 回答