在Windows XP SP2下,Winsock的异常将会导致Apache 2.2.8服务无法启动(具体为httpd.exe程序无法启动),其错误日志error.log文件将会有如下提示:
[Sun Jun 01 22:38:02 2008] [crit] (OS 10022)提供了一个无效的参数。? : Child 500: setup_inherited_listeners(), WSASocket failed to open the inherited socket.
但系统日志不一定会出现该setup_inherited_listeners错误信息,反而可能会出现“httpd.exe: Could not reliably determine the server's fully qualified domain name, using xxx.xxx.xxx.xxx for ServerName? .”的错误信息,从而误导了排错方向。
如果系统能记录setup_inherited_listeners错误将会出现如下日志描述:
The Apache service named? reported the following error:
>>> (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。? : make_sock: could not bind to address 0.0.0.0:80? .
在网上搜了很长时间,一般所说的解决方法都是:
解决方法:
步骤一:网上邻居->查看网络连接->本地连接(你正在使用网络连接)->右键选"属
性"->;选中"internet协议(TCP/IP)
再单击“属性”->高级->切换到"wins"标签->;去掉"启用LMhosts查询"前的勾.
步骤二:控制面版->windows防火墙->高级标签->本地连接设置->服务的标签里勾
选"安全Web服务器(HTTPS)",按两次确定.
步骤三:重启apache服务。
这实则是误导大家,本人测试了N遍都不成功——因为他们的问题是Apache占用CPU100%才会用这个方法来解决,后经长期考证终于解决:
Windows Sockets的异常导致了Apache无法启动。看到这,大汗:枉自己以前对电脑病毒那么熟悉,怎么一个小小的winsock故障就不会想到呢......
赶紧用hijackthis检测一下,果然发现了不明winsock文件的O10。而这些文件,是前两天闲逛校图书馆资源服务的时候、安装的一个VPN服务组件。
原来,图书馆的电子资源因受IP地址的限制,目前只能被校园网内用户访问。要在非校园网内使用校园网的电子资源,则要使用虚拟专用网(简称VPN)技术。而由于这个公司的VPN技术挂接了Winsock,因此就有可能导致Apache无法启动。
金山清理专家的LSP修复工具更能清楚地显示其winsock挂接情况。
解决方法是,重置LSP到初始状态(常见的是winsockfix这个软件,金山清理专家的LSP修复工具也能解决该问题)。重启后,问题得到完美解决。
还好,没被大众结果给迷惑,否则只盯着LMhosts的话,估计以后Apache再次出错的时候又兜了个大弯,就是想不到是winsock的问题......
后记:当你的电脑上安装了“绿坝·花季护航”也会出现以上状况!!