这个例子里面其实是将异常退出处理和正常退出处理结合起来了旅郑枝。对于SIGTERM(即kill进程)和SIGINT(即ctrl-c结束前台进程),我们当做是正常退出,在其信号处理函数里面,直接调用了exit(0),而exit(0)又会被server_on_exit捕获到。对于异常退出也是类似,只是调用了exit(-1)表示是异常的。同时异常退出我们会打印出当前的进程堆栈信息,server_backtrace的实现下一篇再说。另外注意的是SIGKILL信号是无法捕获的。而调用abort导致的退出,也是通过SIGABRT信号捕获到进行处理了。其他几种异常退出的信号也是比较常见,一并捕获到进行处理。这样对于异常退出,我们即可统一的log堆栈信息,又可直接继续正常退出时的处理流程了。
设置套接字为非阻塞模式。1、通过设置套接字的属性,把其从阻塞模式改为非阻塞模式,即使没有数据凳喊到来或者连接建立,程序也不会一直等待,而是立刻返回。
2、裤碰超时机制:在代码中设置超时机制,即如果套接字在指定时间内依然处于阻塞状态,则退出程序。
3、信号处理:使用信号处理机制,在另一个线程中枣纯野发送一个指定的信号,如SIGINT信号,当程序接收到该信号时,可以退出当前的阻塞状态。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)