TCP server problem in my iPhone App
I have created a TCP server that lisen for incoming connection on port 42000. The code creates a sockect (startServer) and when a client try to connect to the server then the AcceptCallback is raised. I use AcceptCallback to handle input and output stream. Now... what I can do to close and stop the server (and also stop the listening for incoming connection) ?
Here below my code:
- (void)startServer
{
/* Create the server socket as a TCP IPv4 socket and set a callback */
/* for calls to the socket's lower-level accept() function */
TCPServer = CFSocketCreate(NULL, PF_INET, SOCK_STREAM, IPPROTO_TCP,
kCFSocketAcceptCallBack, (CFSocketCallBack)AcceptCallBack, NULL);
if (TCPServer == NULL)
return;
/* Set the port and address we want to listen on */
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(42000);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
NSData *address = [ NSData dataWithBytes: &addr length: sizeof(addr) ];
if (CFSocketSetAddress(TCPServer, (__bridgeCFDataRef) address) != kCFSocketSuccess) {
fprintf(stderr, "CFSocketSetAddress() failed\n");
CFRelease(TCPServer);
return;
}
CFRunLoopSourceRef sourceRef = CFSocketCreateRunLoopSource(kCFAllocatorDefault, TCPServer, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), sourceRef, kCFRunLoopCommonModes);
CFRelease(sourceRef);
printf("Server -> Socket listening on port %d\n", 42000);
info.text = @"Waiting for a connection...";
}
//This routine is static!
void AcceptCallBack(
CFSocketRef socket,
CFSocketCallBackType type,
CFDataRef address,
const void *data,
void *info)
{
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
/* The native socket, used for various operations */
sock = *(CFSocketNativeHandle *) data;
/* Create the read and write streams for the socket */
CFStreamCreatePairWithSocket(kCFAllocatorDefault, sock, &readStream, &writeStream);
if (!readStream || !writeStream) {
close(sock);
fprintf(stderr, "CFStreamCreatePairWithSocket() failed\n");
return;
}
CFReadStreamOpen(readStream);
CFWriteStreamOpen(writeStream);
inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;
}
- (void) closeTCPServer
{
// ????????
}
Thank you!
iPhone 4, iOS 6