您现在的位置: 首页>> 魔法技能>> bnetd及pvpgn的一个最新bug及修正方案

bnetd及pvpgn的一个最新bug及修正方案

为暗黑FANS提供最客观的资讯…… diablofans.com.cn

作者:佚名 更新:2025-11-28 收藏本文 标签: 暗黑破坏神2 暗黑2

 该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)
满足这个条件即可断定此文件为不可访问状态

来源:收藏本文 点击:179664次 Www.diablofans.com.cn