title: Using select() for non-blocking sockets to connect always returns 1
body: <p>This question is very similar (or almost identical) to <a href="https://stackoverflow.com/questions/5843810/in-a-non-blocking-socket-connect-select-always-returns-1">In a non blocking socket connect, select() always returns 1</a>; however, I can't seem to find where my code is faltering.</p>
  
  <p>I am using non-blocking sockets and want to use select() when connecting a client to a server to check for timeout/success. The problem is select() is always returning 1 almost immediately, even when I don't even have the server running and there is nothing to connect to. Thanks in advance for the help, code snippet is as follows:</p>
  
  <pre><code>//Loop through the addrinfo structs and try to connect to the first one we can
  for(p = serverinfo; p != NULL; p = p-&gt;ai_next) {
      if ((sockfd = socket(p-&gt;ai_family, p-&gt;ai_socktype, p-&gt;ai_protocol)) == -1) 
      {
          //We couldn't create the socket, try again
          perror("client: socket");
          continue;
      }
  
      //Set the socket to non-blocking
      int flags = fcntl(sockfd, F_GETFL, 0);
      fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
  
      if (connect(sockfd, p-&gt;ai_addr, p-&gt;ai_addrlen) == -1) {
          //The error was something other than non-block/in progress, try next addrinfo
          if(errno != EINPROGRESS) 
          {
              close(sockfd);
              perror("client: connect");
              continue;
          }
  
          fd_set write_fds;
          FD_ZERO(&amp;write_fds);            //Zero out the file descriptor set
          FD_SET(sockfd, &amp;write_fds);     //Set the current socket file descriptor into the set
  
          //We are going to use select to wait for the socket to connect
          struct timeval tv;              //Time value struct declaration
          tv.tv_sec = 5;                  //The second portion of the struct
          tv.tv_usec = 0;                 //The microsecond portion of the struct
  
          //DEBUG: This is ALWAYS 1
          int select_ret = select(sockfd + 1, NULL, &amp;write_fds, NULL, &amp;tv);
          cout &lt;&lt; select_ret &lt;&lt; endl;
  
          //Check return, -1 is error, 0 is timeout
          if(select_ret == -1 || select_ret == 0)
          {
              //We had an error connecting
              cout &lt;&lt; "Error Connecting\n";
              close(sockfd);
              continue;
          }
      }
  
      //We successfully connected, break out of loop
      break;
  }
  </code></pre>