如果网络连接中断,读取系统调用以获取驻留在smb挂载上的文件将永久挂起?

时间:2012-06-15 20:06:20

标签: linux network-programming blocking smb

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

1 个答案:

答案 0 :(得分:0)

您可以尝试将远程文件系统安装为cif而不是smb。 mount.cifs支持soft选项(也是默认选项),如果网络或服务器发生故障而不是挂起,则会导致返回错误。

从手册页:

  

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