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

Pho*_*ong 2 c sockets nonblocking

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

检查文档并在互联网上搜索后,我无法找到如何做到这一点

Tho*_*ini 6

它的工作方式非常类似于send():如果套接字设置为O_NONBLOCK,操作将阻塞,则sendfile()立即返回并设置errnoEAGAIN.在这种情况下,你必须等待一段时间,然后再试一次(也许使用一个功能,如select()知道什么时候准备好).

还要记住,即使它成功,也可能无法在单个函数调用中写入您请求的所有字节.始终检查返回值:

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

您还可以查看sendfile()手册页

  • 稍微扩展:如果`sendfile()`返回一个> 0的值,那么现在已经成功发送了那么多字节 - 没有必要等待完成."非阻塞"并不意味着"非同步". (2认同)