sendfile()完成到非阻塞套接字

时间:2009-12-20 14:49:26

标签: c sockets nonblocking

在我的程序中,我需要在非阻塞套接字中检查sendfile()操作的完成情况。怎么办?

检查文档并在互联网上搜索后,我找不到如何操作

1 个答案:

答案 0 :(得分:6)

它与send()非常相似:如果套接字设置为O_NONBLOCK且操作会阻止,sendfile()会立即返回并将errno设置为EAGAIN }。在这种情况下,你必须等待一段时间,然后再试一次(也许使用类似select()的函数来知道它什么时候准备好了。)

另请注意,即使成功,也可能无法在单个函数调用中写入您请求的所有字节。始终检查返回值:

  

如果传输成功,则写入out_fd的字节数为   回。出错时,返回-1,并正确设置errno。

您还可以查看man page for sendfile()