En cours d'exécution sur le simulateur iPhone, j'écoute sur un port pour les paquets, mais mon callback n'est jamais appelé (et les paquets sont envoyés, vérifiés avec wireshark). Code simplifié suit:Rappel de lecture de paquets CFNetwork non appelé (iPhone)
#define IN_PORT (51112)
static void ReadCallback (CFSocketRef theSocket, CFSocketCallBackType theType, CFDataRef theAddress, const void *data, void *info)
{
NSLog(@"Data received");
}
@implementation MyListener
- (void) ListenOnPort:(uint16_t)port withCallback:(CFSocketCallBack)callback
{
CFSocketContext context = {0,self,NULL,NULL,NULL};
CFSocketRef cfSocket = CFSocketCreate(NULL, PF_INET, SOCK_DGRAM, PPROTO_UDP, kCFSocketReadCallBack, callback, &context);
if (cfSocket==NULL)
NSLog(@"CFSocketCreate failed");
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = port;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
NSData *address = [NSData dataWithBytes:&addr length:sizeof(addr)];
if(kCFSocketSuccess != CFSocketSetAddress(cfSocket, (CFDataRef)address))
NSLog(@"CFSocketSetAddress failed");
CFRunLoopSourceRef rls = CFSocketCreateRunLoopSource(kCFAllocatorDefault, cfSocket, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), rls, kCFRunLoopCommonModes);
CFRelease(rls);
}
@end
Ailleurs dans le code, MyListener est instancié et sa méthode ListenOnPort est appelée, comme ceci:
myListener = [[MyListener alloc] init];
[myListener ListenOnPort:IN_PORT withCallback:&ReadCallback];
Aucune défaillance se produit, mais les données ne sont jamais reçu. Source de paquets est un autre ordinateur sur le même LAN, et comme je l'ai mentionné, ils sont vus par wireshark (UDP avec IP correct et numéro de port).
C'est la première fois que j'essaie d'utiliser ce framework. Toute aide est appréciée.
C'était tout. Merci! – apalopohapa