O GCDAsyncUdpSocket fecha imediatamente ao enviar para um endereço IPv6

Estou conectando via UDP a um servidor em um dispositivo diferente que é anunciado pelo Bonjour. Quando o dispositivo iOS em que este código está sendo executado e o servidor estão em nossa rede Wi-Fi, ele funciona bem, porque o serviço bonjour resolve para um endereço 192.168.0.xxx que o nosso servidor dhcp distribui. No entanto, quando é anunciado pelo bluetooth, às vezes o serviço resolve para 169.254.xxx.xxx (IPv4), caso em que funciona muito bem. Mas às vezes resolve para fe80 :: xxxx: xxxx: xxxx: xxxx (IPv6), caso em que o soquete se conecta (eu recebo oudpSocket:didConnectToAddress callback), mas fecha imediatamente quando tento enviar dados (eu receboudpSocketDidClose:withError callback imediatamente ao chamar o send).

- (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;
}

MinhasudpSocket:didConnectToAddress método chama um envio e meus outros retornos de chamada são basicamente apenas informativos (NSLog) neste momento. Este é o erro do NSE passado paraudpSocketDidClose:withError:

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

Menos que útil.

Ao corrigir isso, eu gostaria de fazê-lo funcionar com o IPv6, em vez de forçar o IPv4 ... forçar o IPv4 só me parece frágil.

questionAnswers(2)

yourAnswerToTheQuestion