Guest User

Untitled

a guest
Jan 22nd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. - (void) setupSocket {
  2. struct sockaddr_in addr;
  3.  
  4. bzero(&addr, sizeof(addr));
  5. addr.sin_len = sizeof(addr);
  6. addr.sin_family = AF_INET;
  7. // Ask kernel to randomly assign port
  8. addr.sin_port = 0;
  9.  
  10. void* info = (__bridge void*) self;
  11. readsock = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM,
  12. IPPROTO_TCP, kCFSocketReadCallBack |
  13. kCFSocketAcceptCallBack | kCFSocketDataCallBack |
  14. kCFSocketConnectCallBack | kCFSocketWriteCallBack,
  15. (CFSocketCallBack)&readSockCallBack, info);
  16.  
  17. CFRunLoopSourceRef sourceRef =
  18. CFSocketCreateRunLoopSource(kCFAllocatorDefault, readsock, 0);
  19. CFRunLoopAddSource(CFRunLoopGetCurrent(), sourceRef, kCFRunLoopCommonModes);
  20.  
  21. int readsockfd = CFSocketGetNative(readsock);
  22. int err = bind(readsockfd, (struct sockaddr *) &addr, sizeof(addr));
  23. if (err != 0) {
  24. LOG_NETWORK(8, @"binding readsocket failed due to error %d: %d", err, errno);
  25. assert(0);
  26. }
  27.  
  28. socklen_t addrLen = sizeof(addr);
  29. // Figure out which port the kernel gave us
  30. err = getsockname(readsockfd, (struct sockaddr *) &addr, &addrLen);
  31. if (err != 0) {
  32. LOG_NETWORK(8, @"Getting socket info failed! %d: %d", err, errno);
  33. }
  34.  
  35. _port = ntohs(addr.sin_port);
  36.  
  37. // Backlog of 15
  38. err = listen(readsockfd, 15);
  39. if (err != 0) {
  40. LOG_NETWORK(8, @"Listening on socket failed! %d: %d", err, errno);
  41. }
  42. }
Add Comment
Please, Sign In to add comment