gpt4 book ai didi

如果前端 Tomcat 被终止,C++ 服务器将终止。错误 "Received untrapped signal [13] - SIGPIPE"

转载 作者:行者123 更新时间:2023-11-28 03:59:16 25 4
gpt4 key购买 nike

我的 C++ 服务器程序遇到问题。请求XML来自前端(Java),后端服务器(C++)处理请求并返回回复XML。

作为向后端提交请求后测试的一部分,我们终止了 Tomcat 服务器。后端应用程序(线程服务器应用程序)在处理请求后未能发送响应,因为 Tomcat 服务器已关闭。服务器因抛出错误“收到未捕获的信号 [13] - [SIGPIPE]”而终止。我们已经实现了 sigalrm 和 sigterm 功能。

上面的信号错误没有被捕捉到。实现sigaction会有帮助吗?此外,一旦捕获到信号,需要做什么才能返回到服务器正在监听的主循环?

编辑:

我们发现 send() 函数有一个参数 MSG_NOSIGNAL。传递此参数后,如果连接终止,发送函数将不会抛出 SIGPIPE 信号。

最佳答案

最简单的做法就是忽略信号:

struct sigaction new_action, old_action;

/* Set up the structure to specify the new action. */
new_action.sa_handler = SIG_IGN;
sigemptyset (&new_action.sa_mask);
new_action.sa_flags = 0;

sigaction(SIGPIPE, &new_action, &old_action);

执行此操作后,导致信号的读取或写入调用现在将返回错误,您的代码需要准备好处理该错误。

关于如果前端 Tomcat 被终止,C++ 服务器将终止。错误 "Received untrapped signal [13] - SIGPIPE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1720271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com