我们有简单的客户端/服务器应用程序 我们在beaglebone黑色定制板上运行服务器。
我们在init脚本中启动服务器,在主机PC上运行的客户端正在尝试连续连接到服务器
select函数调用在服务器应用程序中用于在调用accept之前检查服务器套接字上的事件,如下所示
selectOperationStatus = select(socketfd + 1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &tv);
if (selectOperationStatus > 0){
clientFd = accept(socketfd, (struct sockaddr *) &client_addr, &sin_size)
}
我们观察到在启动过程中,select函数调用需要13秒才能接受来自客户端的连接。 但是,如果在启动后的某个时间启动相同的服务器应用程序,则连接时间为1秒。
为什么选择功能在启动时需要时间(约13秒)? 任何调试建议/指针?任何替代方案?
答案 0 :(得分:4)
经过一些调试后我们发现实际问题是电路板的dhcp客户端需要时间才能获得ip。一旦指定了ip,select()函数就会返回 所以选择功能并不是我们最初想到的真正罪魁祸首。虽然程序卡在选择功能,但实际问题是启动后dhcp需要时间来分配ip;有时dhcp需要7-12秒来分配ip。
DHCP服务器在虚拟机中安装的ubuntu中运行,当我们连接到路由器ip时,分配变得很快(在3-5秒内)。