GCDAsyncUdpSocket se cierra inmediatamente cuando se envía a una dirección IPv6

Me conecto a través de UDP a un servidor en un dispositivo diferente anunciado por Bonjour. Cuando tanto el dispositivo iOS en el que se ejecuta este código, como el servidor, están en nuestra red wifi, funciona bien porque el servicio bonjour se resuelve en una dirección 192.168.0.xxx que nuestro servidor dhcp distribuye. Sin embargo, cuando se anuncia mediante bluetooth, a veces el servicio se resuelve en 169.254.xxx.xxx (IPv4), en cuyo caso funciona bien. Pero a veces se resuelve en fe80 :: xxxx: xxxx: xxxx: xxxx (IPv6) en cuyo caso el socket se conecta (recibo eludpSocket:didConnectToAddress devolución de llamada) pero se cierra inmediatamente cuando intento enviar datos (recibo eludpSocketDidClose:withError devolución de llamada inmediatamente después de llamar enviar).

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

MiudpSocket:didConnectToAddress El método llama a un envío, y mis otras devoluciones de llamada son básicamente solo informativas (NSLog) en este punto. Este es el NSError pasado audpSocketDidClose:withError:

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

Menos que útil.

Al arreglar esto, me gustaría que funcione con IPv6 en lugar de forzar IPv4 ... forzar IPv4 simplemente me parece frágil.