我正在学习用 C(指的是 Beej)进行套接字编程。
这是我尝试实现的一个简单的多用户聊天服务器: http://pastebin.com/gDzd0WqP
在运行时,它给出总线错误。它来自第 68-78 行。
帮我追查问题根源?
事实上,为什么我的代码甚至到达了那个特定区域?我刚刚运行服务器。没有客户端连接.. :@
ps - 我知道我的代码非常不可靠(任何地方都没有错误检查),但我会在稍后阶段这样做,我只想在实现它之前测试代码的功能;)
最佳答案
第 81 行
msg[MSG_SIZE] = '\0';`
超出你的缓冲区。做到这一点
msg[MSG_SIZE - 1] = '\0';`
您还需要检查所有可能失败的调用的返回值,即第 39、42、45、68 和 80 行
编辑:如果您检查了错误,您可能会看到 accept() 调用失败,这可能是由于套接字未处于监听模式 - 也就是说,您错过了对 的调用听()
关于C 套接字编程,select() 和 fd_set 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540020/