2010-11-02 13 views
5

Estoy creando una conexión de socket TCP utilizando CFStreamCreatePairWithSocketToHost como este para obtener una corriente de escritura (no quiero listos ningún dato):¿Hay alguna manera de obtener la referencia de socket utilizando CFStreamCreatePairWithSocketToHost()?

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)host, port, NULL, &writeStream); 

Esto funciona bastante bien, pero debido a las nagle's algorithm mis comandos TCP se conserva en memoria. Esto puede ser genial, pero en mi caso necesito enviar el comando lo más rápido posible sin retrasos.

He encontrado una manera de desactivar esta "característica" usando el siguiente código encontró here:

int yes = 1; 
setsockopt(CFSocketGetNative(aSocket), IPPROTO_TCP, TCP_NODELAY, (void *)&yes, sizeof(yes)); 

, pero no puedo encontrar la manera de obtener una referencia válida a mi zócalo. ¿Me puedes ayudar?

Respuesta

9
CFDataRef socketData = CFWriteStreamCopyProperty(writeStream, kCFStreamPropertySocketNativeHandle); 
CFSocketNativeHandle handle; 
CFDataGetBytes(socketData, CFRangeMake(0, sizeof(CFSocketNativeHandle)), &handle); 
// handle now contains the same thing as CFSocketGetNative(aSocket) 
+0

Gracias por eso, me ayudó mucho (hace 14 meses ... :-)) –

Cuestiones relacionadas