c - 你怎么能 "avoid"SIGSEGV?

标签 c linux segmentation-fault alarm

我正在编写一个客户端-服务器应用程序,其中客户端从服务器端获得一个确定的内存地址。

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

服务器如何保护自己不受 SIGSEGV 影响并继续接受连接并正常运行?发生这种情况时,有什么办法可以避免服务器崩溃吗?

非常感谢。

最佳答案

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

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

关于c - 你怎么能 "avoid"SIGSEGV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2510976/

相关文章:

c - int (*ptr)[4] 的真正含义是什么,它与 *ptr 有何不同?

c - C中堆栈溢出和无限次循环调用的区别

char *filenames[1] 或 char *filenames 有什么区别?

c - 尝试测试 fgets() 时出现段错误

c - 基本 C 文件 I/O 程序的指针问题

c - AlchemyAPI C 无法在 Ubuntu 上编译 - 特别是 keywordspp

linux - 用 bash 中的另一个子字符串替换一个子字符串

linux - 打开包含给定数据的文件的命令

无法从 C 中的文本文件中读取所有名称

linux - 运行带有多个参数的 Linux 命令