当前位置: 技术问答>linux和unix
Linux信号问题
来源: 互联网 发布时间:2016-09-01
本文导语: 现在有一个程序,分客户端和服务器端,我想实现在客户端关机的瞬间向服务器端发送一个消息。我用Linux C已经可以成功地捕获客户端的关机信号。该信号的处理函数如下: void signal_poweroff(int sig) { put_current_time(...
现在有一个程序,分客户端和服务器端,我想实现在客户端关机的瞬间向服务器端发送一个消息。我用Linux C已经可以成功地捕获客户端的关机信号。该信号的处理函数如下:
可是由于在关机的同时还要向服务器端发送数据,所以客户端还没有来得及发送数据就关机了,服务器端收不到客服端关机的消息。请问这种情况该怎么解决阿?
void signal_poweroff(int sig)
{
put_current_time();//记录退出的时间(用于重启后的恢复)
//在下面添加你的代码(除非完全理解以上代码,否则不要修改上面的代码)
int sock;
protocol_message complete_msg;
char buf[BUFFER_SIZE];
bzero(buf, BUFFER_SIZE);
//初始化网络模块(如果有的话,就添加到这个函数中。没有就什么也不做)
sock = protocol_init();
assemble_shutdown(&complete_msg);
network_send_msg_fragments(sock, 1, &complete_msg);
close(sock);
printf("客户端关机n");
}
可是由于在关机的同时还要向服务器端发送数据,所以客户端还没有来得及发送数据就关机了,服务器端收不到客服端关机的消息。请问这种情况该怎么解决阿?
|
其实你应该换种想法来,因为关机来说在发送数据到服务器,就算你捕获到,但也是很短暂的几毫秒,除非你有办法控制这个关机时间,否则根本无法使用.
这样,那么我们可以通过服务器来判断,如何判断呢,就是在客户端在线的情况下,按一个间隔时间发送心跳包到服务器,如果服务器没收到心跳包,就应该判断客户端关机了,这样一样不就简单多了吗.
生活告诉我们,一条路走不通,可以换角度想想.
这样,那么我们可以通过服务器来判断,如何判断呢,就是在客户端在线的情况下,按一个间隔时间发送心跳包到服务器,如果服务器没收到心跳包,就应该判断客户端关机了,这样一样不就简单多了吗.
生活告诉我们,一条路走不通,可以换角度想想.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。