你怎么能"避免"一个SIGSEGV?

Jan*_*els 4 c linux segmentation-fault alarm

我正在编写一个客户端 - 服务器应用程序,其中客户端具有来自服务器端的确定的内存地址.

如果出现问题并且服务器需要重新启动,则客户端具有的地址不再有效.当使用使用该无效信息的函数时,SIGSEGV将被发送到服务器,因为地址可能不再是它的.

服务器如何保护自己免受SIGSEGV的影响并继续接受连接并正常运行?有没有办法在发生这种情况时不崩溃服务器?

非常感谢你.

JSB*_*ոգչ 12

客户端不应该向服务器发送内存地址.如果客户端需要对服务器资源的引用,则服务器应该为其提供某种句柄,服务器可以将其转换为地址,但不会直接取消引用.

在您的情况下,服务器重新启动可能使客户端的句柄无效.服务器应该注意到这一点,并向客户端返回一个易于理解的错误代码,告诉它获取新的资源句柄.

  • 发现.将指针服务器传递给客户端,反之亦然是非常疯狂的:) (2认同)