title: THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY
body: <p>I am developing a chat program in iOS. But I could not solve a problem related to threads. Firstly, I created a server socket handling multiple connections in a thread. My code is like that:</p>
  
  <pre><code>    - (void)viewDidLoad
      {
          [super viewDidLoad];
  
          [NSThread detachNewThreadSelector:@selector(aMethod:) toTarget:[self class] withObject:nil];
      }
  
      void doprocessing(int sock)
      {
         int n;
  
         char *buffer = malloc(256);
  
         bzero(buffer,256);
  
         n = read(sock,buffer,255);
         if (n &lt; 0)
         {
            perror("ERROR reading from socket");
            exit(1);
         }
  
        printf("Here is the message: %s\n",buffer);
  
        n = write(sock,"I got your message",18);
  
        if (n &lt; 0)
        {
           perror("ERROR writing to socket");
           exit(1);
        }
     }
  
     +(void)aMethod:(id)param{
  
      int x;
      for(x=0;x&lt;50;++x)
      {
      int sockfd, newsockfd, portno, clilen;
      char buffer[256];
      struct sockaddr_in serv_addr, cli_addr;
      int  n;
  
      sockfd = socket(AF_INET, SOCK_STREAM, 0);
      if (sockfd &lt; 0)
      {
          perror("ERROR opening socket");
          exit(1);
      }
  
      bzero((char *) &amp;serv_addr, sizeof(serv_addr));
      portno = 5001;
      serv_addr.sin_family = AF_INET;
      serv_addr.sin_addr.s_addr = INADDR_ANY;
      serv_addr.sin_port = htons(portno);
  
      if (bind(sockfd, (struct sockaddr *) &amp;serv_addr,
               sizeof(serv_addr)) &lt; 0)
      {
          perror("ERROR on binding");
          exit(1);
      }
  
      listen(sockfd,5);
      clilen = sizeof(cli_addr);
      while (1)
      {
          newsockfd = accept(sockfd,(struct sockaddr *) &amp;cli_addr, &amp;clilen);
          if (newsockfd &lt; 0)
          {
              perror("ERROR on accept");
              exit(1);
          }
  
          int pid = fork();
          if (pid &lt; 0)
          {
              perror("ERROR on fork");
              exit(1);
          }
          if (pid == 0)
          {
  
              close(sockfd);
              doprocessing(newsockfd);
              exit(0);
          }
          else
          {
              close(newsockfd);
          }
          } 
      }
  }
  </code></pre>
  
  <p>As you know, I can not reach the gui elements in that thread. For this reason, I called mainThread function, but still I can not reach gui elements. I got this result:</p>
  
  <pre><code>The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
  Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
  The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
  Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
  The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
  Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
  The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
  Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
  The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
  Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
  The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
  Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
  The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
  Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
  The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
  Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
  The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
  Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
  The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
  Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
  </code></pre>
  
  <p>If I do not use fork, it works. But my question is that how can i reach the gui elements by using fork function?</p>