我正在编写一个客户端 - 服务器应用程序,其中客户端具有来自服务器端的确定内存地址。
如果出现问题并且服务器需要重新启动,则客户端具有的地址不再有效。当使用使用该无效信息的函数时,SIGSEGV将被发送到服务器,因为地址可能不再是它。
服务器如何保护自己免受SIGSEGV的影响并继续接受连接并正常运行?有没有办法在发生这种情况时不让服务器崩溃?
非常感谢。
答案 0 :(得分:12)
客户端不应向服务器发送内存地址。如果客户端需要对服务器资源的引用,则服务器应该为其提供某种句柄,服务器可以将其转换为地址,但不会直接取消引用。
在您的情况下,服务器重新启动可能使客户端的句柄无效。服务器应该注意到这一点并向客户端返回一个易于理解的错误代码,告诉它获取新的资源句柄。
答案 1 :(得分:0)
管理存储指针的连接表。如果服务器重新启动,它将重建一个新表。客户端只知道其连接的索引(或密钥或其他)。
未指定上下文,但发送指向客户端的指针可能是一个很大的安全漏洞,因为客户端可能非常容易使服务器崩溃。
答案 2 :(得分:0)
不使用指针,而是使用数组或映射的索引。这可能会导致索引被重用,但是很容易检测并忽略粗略无效的索引。