我有一个程序可以打开几个套接字来监听和发送。我发现了一个非常奇怪的情况,到目前为止只在Mac OS X上,gethostbyname
完全冻结了程序。
首先,我不使用线程。其次,只有在我一次运行两个我的测试程序副本时才会出现问题。
第一个实例创建4个发送和4个接收套接字,然后它们开始相互发送流量。在我用于消息传递的网络库中,在接收端口打开后调用gethostbyname()
。我发现当我开始测试程序的第二个实例时,在打开3个接收器后,最后一个只是卡在那里。
我已将问题缩小到gethostbyname
的调用,似乎永远不会返回。 (请记住,到目前为止,每次调用gethostbyname
都能正常工作。)此外,当它达到这一点时,测试程序的CPU使用率突然跳升到100%,好像有无限的在gethostbyname
中循环。另外我不能用Ctrl-C进程,我必须从另一个终端杀死它。
显然,这种行为是不可接受的,即使它只发生在启动8个发送器/接收器对的极端情况下。 (4个进程一次,4个进入另一个进程。)有没有人见过这个,我怎么能避免它?
顺便说一句,唯一测试的其他平台是Linux(Ubuntu 10.04),运行得很好。
答案 0 :(得分:0)
听起来你可能被这个Oracle Java Bug蜇了。我的解决方法是将Mac的主机名添加到/ etc / hosts
sudo bash -c "echo 127.0.0.1 $HOSTNAME >> /etc/hosts"