bnetd及pvpgn的一个最新bug及修正方案
该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)游戏大厅形象设置指南
相关阅读
..:: 版权声明 ::..
- 网站旨在为用户提供资源整合服务,所有数据均由用户上传或发布,并力求提供准确有价值的相关资源。.网站只做相关资源展示没有做具体测试,希望网友自己区分下 。
- 若涉及到侵权违法的链接,请联系我们将第一时间处理。
- 我们会定期进行数据更新和优化以确保信息的时效性和可靠性。致力成为一个资源整合平台,提供各种网站资源的下载和能满足用户的游戏资讯。
- 感谢您对我们网站的支持,我们将持续努力提供更好的资源整合服务,希望能满足您的需求。