GCDAsyncUdpSocket немедленно закрывается при отправке на адрес IPv6

m подключение через UDP к серверу на другом устройстве, которое рекламируется Bonjour. Когда и устройство iOS, на котором работает этот код, и сервер, находятся в нашей сети Wi-Fi, это работает просто отлично, потому что служба bonjour разрешается по адресу 192.168.0.xxx, который раздает наш сервер dhcp. Однако, когда он объявляется через Bluetooth, иногда служба разрешается до 169.254.xxx.xxx (IPv4), и в этом случае она работает просто отлично. Но иногда он разрешается в fe80 :: xxxx: xxxx: xxxx: xxxx (IPv6), и в этом случае сокет подключается (я получаюudpSocket:didConnectToAddress обратный вызов), но сразу же закрывается, когда я пытаюсь отправить данные (я получаюudpSocketDidClose:withError обратный звонок сразу после звонка отправить).

- (BOOL) setupConnection: (DNSSDService*) service
{
    NSString *host = [service resolvedHost];
    NSUInteger port = [service resolvedPort];
    NSLog(@"in setupConnection: host %@ port %u",
          host, port);

    self.sock = [[GCDAsyncUdpSocket alloc]initWithDelegate:self 
                delegateQueue:dispatch_get_main_queue() ];
    NSError *err = nil;
    if (![self.sock connectToHost:host onPort:port error:&err]) {
        NSLog(@"we goofed: %@", err);
        return NO;
    }
    return YES;
}

мойudpSocket:didConnectToAddress метод вызывает send, и мои другие обратные вызовы в основном просто информационные (NSLog) на данный момент. Это ошибка NSE, переданная:udpSocketDidClose:withError

Error Domain=GCDAsyncUdpSocketErrorDomain Code=4 "Socket closed" UserInfo=0x2630c0 {NSLocalizedDescription=Socket closed}

Менее чем полезно.

В исправлении этого яя хотел бы заставить его работать с IPv6 вместо принудительного IPv4 ... форсирование IPv4 мне кажется хрупким.

Ответы на вопрос(2)

Ваш ответ на вопрос