我正在学习C语言中的套接字编程(参考Beej)。
这是一个我想要实现的简单的多用户聊天服务器: http://pastebin.com/gDzd0WqP
在运行时,它会给出总线错误。它来自第68-78行。
帮我查一下问题的根源?
实际上,为什么我的代码甚至到达那个特定区域?我刚刚运行服务器。没有客户连接..:@
ps - 我知道我的代码非常不可靠(在任何地方都没有错误检查),但我会在稍后阶段做到这一点,我只想在实现它的所有荣耀之前测试代码的功能;)
答案 0 :(得分:3)
第81行
msg[MSG_SIZE] = '\0';`
超出你的缓冲区。做到这一点
msg[MSG_SIZE - 1] = '\0';`
您还需要检查可能失败的所有呼叫的返回值,即第39,42,45,68和80行
编辑:如果你检查过错误,可能你看到accept()调用失败,可能是因为套接字没有处于监听模式 - 也就是说,你错过了对{{1 }}
答案 1 :(得分:1)
要考虑的另一件事是,您不一定能通过简单的赋值复制fd_set
变量。处理它们的唯一可移植方法是每次循环重新生成fd_set
活动文件描述符列表。