如果网络连接断开,则驻留在 SMB 装载上的文件的读取系统调用将永久挂起



我已经在centos盒子上安装了一个Windows共享文件夹。当我尝试使用读取系统调用读取大文件时,如果网络连接中断,则读取只是挂起并将我的程序置于不间断的睡眠状态。这听起来不对。即使我使用O_NONBLOCK打开文件,读取也会挂起。我希望阅读最终会超时,但事实并非如此。如果读取只是阻塞而不返回任何错误,您如何通过网络实现可靠的复制操作?我不认为使用异步模式并选择呼叫也会帮助我。读取总是阻止调用吗?谢谢加纳库

您可以尝试将远程文件系统挂载为 cifs 而不是 smb.mount.cifs 支持soft选项(这也是默认值),这将导致在网络或服务器故障而不是挂起的情况下返回错误。

从手册页:

soft:(默认值)当服务器崩溃时,访问 cifs 挂载文件系统上的文件的程序将不会挂起,并将向用户应用程序返回错误。