Hello. I have a problem with my program. I created a socket with "kCFSocketReadCallBack. My intention was to call the "acceptCallback" only when it receives a string to the socket. Instead my program does not just accept the connection always goes into "startReceive" stop doing so and sometimes crash the program. Can anybody help? Thanks
readSocket = CFSocketCreateWithNative(
NULL,
fd,
kCFSocketReadCallBack,
AcceptCallback,
&context
);
static void AcceptCallback(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info)
// Called by CFSocket when someone connects to our listening socket.
// This implementation just bounces the request up to Objective-C.
{
ServerVistaController * obj;
#pragma unused(address)
// assert(address == NULL);
assert(data != NULL);
obj = (ServerVistaController *) info;
assert(obj != nil);
#pragma unused(s)
assert(s == obj->listeningSocket);
if (type & kCFSocketAcceptCallBack){
[obj acceptConnection:*(int *)data];
}
if (type & kCFSocketAcceptCallBack){
[obj startReceive:*(int *)data];
}
}
-(void)startReceive:(int)fd
{
CFReadStreamRef readStream = NULL;
CFIndex bytes;
UInt8 buffer[MAXLENGTH];
CFStreamCreatePairWithSocket(
kCFAllocatorDefault,
fd,
&readStream,
NULL);
if(!readStream){
close(fd);
[self updateLabel:@"No readStream"];
}
CFReadStreamOpen(readStream);
[self updateLabel:@"OpenStream"];
bytes = CFReadStreamRead(
readStream,
buffer,
sizeof(buffer));
if (bytes < 0) {
[self updateLabel:(NSString*)buffer];
close(fd);
}
CFReadStreamClose(readStream);
}