对于web服务器,要尽量的减小服务器的负担。如果,浏览器已经取消请求连接,web服务器就不应该再向浏览器发送页面的数据了。我本次是测试web服务器是如何知道浏览器已经取消了请求哪?
如果浏览器取消请求,web服务器继续向浏览器发送请求,将会造成web服务器的崩溃。在高级语言中种称之为异常也叫做异常中断,但是在C语言中没有。可是,C语言中的信号量提供了类似异常的功能。但是很多书上对linux信号这一块将的都不是很详细,经过查资料发现,其中的SIGPIPE信号比较符合要求,经过测试发现当浏览器取消请求时,服务端可以通过捕获此信号来进行处理,避免服务器端崩溃。经过测试发现不是浏览器已取消请求。那是在什么时候服务器在可以接受到SIGPIPE信号?下面我们看下测试。
主要代码:(本代码和结论只经过本人的简单测试,可能存在问题。请相信自己的能力,敢于质疑。欢迎提供更好的、更快、更简洁的代码或者方法和指出错误。在ubuntu12.04使用gcc4.6.3版本编译,在vc中如出现错误,请谅解。)
res_socket = socket_listen( "127.0.0.1", 1024) ;
signal (SIGPIPE, test);//test函数只在屏幕中输出了 test close
while(1){
conn_socket = accept( res_socket, (struct sockaddr * )&client_addr, &len );