0

我有一个程序可以打开几个套接字来监听和发送。我发现了一个非常奇怪的情况,到目前为止只在 Mac OS X 上,gethostbyname完全冻结了程序。

首先,我没有使用线程。其次,只有当我同时运行两个测试程序副本时才会出现问题。

第一个实例创建 4 个发送和 4 个接收套接字,然后它们开始相互发送流量。在我用于消息传递的网络库中,gethostbyname()在接收端口打开后立即调用。我发现当我启动测试程序的第二个实例时,在打开 3 个接收器后,最后一个就卡在那里了。

我已将问题缩小到对 的调用gethostbyname,它似乎永远不会返回。(请记住,到目前为止,每次调用都运行良好gethostbyname。)此外,当它到达这一点时,测试程序的 CPU 使用率突然跳到 100%,就好像在gethostbyname. 另外我不能 Ctrl-C 进程,我必须从另一个终端杀死它。

显然这种行为是不可接受的,即使它只发生在启动 8 个发送方/接收方对的这种极端情况下。(一次过程中 4 个,另一个过程中 4 个。)以前有没有人见过这种情况,我该如何避免?

顺便说一句,唯一测试过的其他平台是 Linux (Ubuntu 10.04),它运行得很好。

4

1 回答 1

0

听起来您可能已经被这个Oracle Java Bug刺痛了。我的解决方法是将我的 Mac 的主机名添加到 /etc/hosts

sudo bash -c "echo 127.0.0.1 $HOSTNAME >> /etc/hosts"
于 2013-06-23T15:50:58.787 回答