在我的程序中,我需要在非阻塞套接字中检查sendfile()操作的完成情况。怎么办?
检查文档并在互联网上搜索后,我找不到如何操作
答案 0 :(得分:6)
它与send()
非常相似:如果套接字设置为O_NONBLOCK
且操作会阻止,sendfile()
会立即返回并将errno
设置为EAGAIN
}。在这种情况下,你必须等待一段时间,然后再试一次(也许使用类似select()
的函数来知道它什么时候准备好了。)
另请注意,即使成功,也可能无法在单个函数调用中写入您请求的所有字节。始终检查返回值:
如果传输成功,则写入out_fd的字节数为 回。出错时,返回-1,并正确设置errno。
您还可以查看man page for sendfile()