C套接字编程,select()和fd_set的问题

时间:2010-03-29 17:43:11

标签: c sockets select

我正在学习C语言中的套接字编程(参考Beej)。

这是一个我想要实现的简单的多用户聊天服务器: http://pastebin.com/gDzd0WqP

在运行时,它会给出总线错误。它来自第68-78行。

帮我查一下问题的根源?

实际上,为什么我的代码甚至到达那个特定区域?我刚刚运行服务器。没有客户连接..:@

ps - 我知道我的代码非常不可靠(在任何地方都没有错误检查),但我会在稍后阶段做到这一点,我只想在实现它的所有荣耀之前测试代码的功能;)

2 个答案:

答案 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活动文件描述符列表。