bnetd及pvpgn的一个最新bug及修正方案
为暗黑FANS提供最客观的资讯…… diablofans.com.cn
该bug只对windows操作系统架设的bnetd及pvpgn服务器起作用
其原理是windows操作系统禁止了一些保留字作为文件名, 如com1, con, nul, prn, lpt1等等
在windows系统下, 当使用这些文件名作为游戏账号或查询这些账号状态时, 会导致服务器程序死锁或崩溃
此bug对部分1.09, 1.10, 1.11版本的服务器有影响
经过后续分析, 发现产生这个问题的原因是当服务器在查找某个acc的时候, 会首先判断这个acc所在的user文件是否存在
这个判断机制在判断这些DOS Device的时候会呈现成功状态
之后服务器会用fopen尝试打开该user文件
打开也是成功的, 但打开的并不是文件, 而是系统保留的DOS Device设备,(比如com1串口)
之后服务器会用read去读取这个文件, 实际上对windows系统来说是在读取串口数据
而串口并没有数据返回, 于是服务器软件在这里持续不断地等待, 呈假死状态
判断一个服务器是否存在这个bug的简单方法是输入/m *com1 ni hao
该bug最新解决方法 (以bnetd 5.2.9为例)
修改account.c文件accountlist_load_account函数889行
if (stat(pathname, &statbuf) < 0) {
增加一个条件判断
改为
if (stat(pathname, &statbuf) < 0 || (statbuf.st_size == 0 && statbuf.st_mtime == -1)) {
若windows系统的DOS Device保留设备在stat查询状态值得时候, 返回的文件size为0, 最后访问时间mtime为invalid time(-1)
满足这个条件即可断定此文件为不可访问状态
上一篇文章:暗黑2MOD修改各章节的任务奖励
下一篇文章:Bnetd(PvPGN)游戏大厅形象设置指南
相关阅读
..:: 版权声明 ::..
- 网站旨在为用户提供资源整合服务,所有数据均由用户上传或发布,并力求提供准确有价值的相关资源。.网站只做相关资源展示没有做具体测试,希望网友自己区分下 。
- 若涉及到侵权违法的链接,请联系我们将第一时间处理。
- 我们会定期进行数据更新和优化以确保信息的时效性和可靠性。致力成为一个资源整合平台,提供各种网站资源的下载和能满足用户的游戏资讯。
- 感谢您对我们网站的支持,我们将持续努力提供更好的资源整合服务,希望能满足您的需求。