Macos Mac防火墙阻止正确关闭多个多播UDP端口

Macos Mac防火墙阻止正确关闭多个多播UDP端口,macos,udp,osx-lion,ipfw,Macos,Udp,Osx Lion,Ipfw,在我的MacOSX 10.74上,我遇到了这种行为,我很快得出结论,这是MacOSX防火墙软件中的一个缺陷。基本上,在应用程序退出后,会话期间使用的多播UDP端口不会关闭,只有一个端口关闭 为了进行演示,我设置了两个应用程序。一个叫做UDPSender,它只向两个多播组发送两条消息。以下代码段可以从Mac或iOS设备运行。GCDAsyncUdpSocket是最新版本 GCDAsyncUdpSocket *udpSocket1; GCDAsyncUdpSocket *udpSocket2; udp

在我的MacOSX 10.74上,我遇到了这种行为,我很快得出结论,这是MacOSX防火墙软件中的一个缺陷。基本上,在应用程序退出后,会话期间使用的多播UDP端口不会关闭,只有一个端口关闭

为了进行演示,我设置了两个应用程序。一个叫做UDPSender,它只向两个多播组发送两条消息。以下代码段可以从Mac或iOS设备运行。GCDAsyncUdpSocket是最新版本

GCDAsyncUdpSocket *udpSocket1;
GCDAsyncUdpSocket *udpSocket2;
udpSocket1 = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
udpSocket2 = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSData *data = [@"A test message from socket1" dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket1 sendData:data toHost:@"239.1.1.110" port:46110 withTimeout:-1 tag:1];
data = [@"A test message from socket2" dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket2 sendData:data toHost:@"239.1.1.120" port:46120 withTimeout:-1 tag:1];
我为Mac创建了另一个名为udpreciver的应用程序。(这是行为不端的一个)

测试顺序如下:打开Mac的防火墙。启动UDPreciver,启动UDPSender。在UdPreciver机器上,Mac的防火墙提示输入权限…选择允许。结果是两条正确的日志语句:

2012-08-07 19:56:53.594 UDPReceiver[290:403] Receiving: A test message from socket1
2012-08-07 19:56:53.595 UDPReceiver[290:403] Receiving: A test message from socket2
接下来,关闭udpreciver,然后再次重新打开udpreciver。您将立即看到此日志

2012-08-07 19:39:13.639 UDPReceiver[810:403] udpSocket1 rrror starting server (bind): Error Domain=NSPOSIXErrorDomain Code=48 "Address already in use" UserInfo=0x7fc7b3109d20 {NSLocalizedDescription=Address already in use, NSLocalizedFailureReason=Error in bind() function}
如果此时重新启动UDPSender,您将看到其他日志输出:

2012-08-07 19:39:29.939 UDPReceiver[810:403] Receiving: A test message from socket2
我打开Mac终端并使用此命令查看活动端口:
netstat-anf inet
。第一张照片是UdPreciver第一次被执行。第二张照片是在UdPreciver关闭后拍摄的

我发现有两种方法可以解决这个问题:

  • 重新启动我的Mac。然后它将再次正常工作。但上述症状仍然存在
  • 完全关闭防火墙。这将彻底消除这个问题
  • 以前有人遇到过这种现象吗?有没有关于如何解决这个问题的建议


    您可能想在或上询问这一问题,更聪明的系统管理员在哪里闲逛。投票迁移。这既是一个系统管理问题,也是一个编程问题。我认为迁移这个不是一个好主意。另外,
    ipfw
    似乎是OSX防火墙的名称。@Charles是对的。我正在寻找一个编程解决方案。这样我的用户就不必重新启动计算机或关闭防火墙。
    2012-08-07 19:39:29.939 UDPReceiver[810:403] Receiving: A test message from socket2