我想连接到服务器,并同步写入(2)。
在某些时候,缓冲区正在填满,我需要阅读(2)让我继续写作。
read(2)当然是不必要地复制大量字节,如果我不知道要多少字节就会阻塞它。
如何丢弃TCP套接字上的传入字节?
我已尝试ioctl(sockfd, I_SRDOPT, RMSGD)
,但它正在返回错误EFAULT
Bad address
。
答案 0 :(得分:2)
您可以在非阻塞模式下使用套接字来定期使用传入数据而不会阻塞。引用tutorial:
如果在非阻塞模式下调用
recv()
,它将返回系统在该套接字的读缓冲区中的所有数据。但是,它不会等待那些数据。如果读缓冲区为空,系统将立即从recv()
返回“操作将阻塞!”。