Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- - (void) setupSocket {
- struct sockaddr_in addr;
- bzero(&addr, sizeof(addr));
- addr.sin_len = sizeof(addr);
- addr.sin_family = AF_INET;
- // Ask kernel to randomly assign port
- addr.sin_port = 0;
- void* info = (__bridge void*) self;
- readsock = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM,
- IPPROTO_TCP, kCFSocketReadCallBack |
- kCFSocketAcceptCallBack | kCFSocketDataCallBack |
- kCFSocketConnectCallBack | kCFSocketWriteCallBack,
- (CFSocketCallBack)&readSockCallBack, info);
- CFRunLoopSourceRef sourceRef =
- CFSocketCreateRunLoopSource(kCFAllocatorDefault, readsock, 0);
- CFRunLoopAddSource(CFRunLoopGetCurrent(), sourceRef, kCFRunLoopCommonModes);
- int readsockfd = CFSocketGetNative(readsock);
- int err = bind(readsockfd, (struct sockaddr *) &addr, sizeof(addr));
- if (err != 0) {
- LOG_NETWORK(8, @"binding readsocket failed due to error %d: %d", err, errno);
- assert(0);
- }
- socklen_t addrLen = sizeof(addr);
- // Figure out which port the kernel gave us
- err = getsockname(readsockfd, (struct sockaddr *) &addr, &addrLen);
- if (err != 0) {
- LOG_NETWORK(8, @"Getting socket info failed! %d: %d", err, errno);
- }
- _port = ntohs(addr.sin_port);
- // Backlog of 15
- err = listen(readsockfd, 15);
- if (err != 0) {
- LOG_NETWORK(8, @"Listening on socket failed! %d: %d", err, errno);
- }
- }
Add Comment
Please, Sign In to add comment