title: Why doesn't accept() block?
body: <p>I'm new in socket programming under Linux (UNIX) sockets.
  I found the following code in the Internet, for a tcp-server that spawns a thread for each connection.
  However it doesn't work.
  the accept() function returns instantly, and doesn't wait for connection.
  What am I doing wrong ?</p>
  
  <p>this is the code</p>
  
  <pre><code>int main(int argv, char *args[])
  {
      struct sockaddr_in addr;
      int sd, port;
  
      port = htons(SERVER_PORT);
  
      /*--- create socket ---*/
      sd = socket(PF_INET, SOCK_STREAM, 0);
      if ( sd &lt; 0 )
          panic("socket");
  
      /*--- bind port/address to socket ---*/
      memset(&amp;addr, 0, sizeof(addr));
      addr.sin_family = AF_INET;
      addr.sin_port = port;
      addr.sin_addr.s_addr = INADDR_ANY;                   /* any interface */
      if ( bind(sd, (struct sockaddr*)&amp;addr, sizeof(addr)) != 0 )
          panic("bind");
  
      /*--- make into listener with 10 slots ---*/
      if ( listen(sd, 10) != 0 )
          panic("listen")
  
      /*--- begin waiting for connections ---*/
      else
      {   int sd;
          pthread_t child;
          FILE *fp;
  
          while (1)                         /* process all incoming clients */
          {
              sd = accept(sd, 0, 0);     /* accept connection */
              fp = fdopen(sd, "wr+");           /* convert into FILE* */
              pthread_create(&amp;child, 0, servlet, fp);       /* start thread */
              pthread_detach(child);                      /* don't track it */
          }
      }
  } 
  </code></pre>