我有一个程序可以打开几个套接字来监听和发送。我发现了一个非常奇怪的情况,到目前为止只在 Mac OS X 上,gethostbyname
完全冻结了程序。
首先,我没有使用线程。其次,只有当我同时运行两个测试程序副本时才会出现问题。
第一个实例创建 4 个发送和 4 个接收套接字,然后它们开始相互发送流量。在我用于消息传递的网络库中,gethostbyname()
在接收端口打开后立即调用。我发现当我启动测试程序的第二个实例时,在打开 3 个接收器后,最后一个就卡在那里了。
我已将问题缩小到对 的调用gethostbyname
,它似乎永远不会返回。(请记住,到目前为止,每次调用都运行良好gethostbyname
。)此外,当它到达这一点时,测试程序的 CPU 使用率突然跳到 100%,就好像在gethostbyname
. 另外我不能 Ctrl-C 进程,我必须从另一个终端杀死它。
显然这种行为是不可接受的,即使它只发生在启动 8 个发送方/接收方对的这种极端情况下。(一次过程中 4 个,另一个过程中 4 个。)以前有没有人见过这种情况,我该如何避免?
顺便说一句,唯一测试过的其他平台是 Linux (Ubuntu 10.04),它运行得很好。