Как принять сокет с тайм-аутом

Существует ли тайм-аут кроссплатформенного решения для приема клиента с помощьюaccept функция без установки сокета на неблокирующую?

Я знаю, что я должен использоватьselect функция к нему, но что яя делаю неправильно?

SOCKET NativesAcceptClient(SOCKET s, int timeout)
{
   int iResult;
   struct timeval tv;
   fd_set rfds;
   FD_ZERO(&rfds);
   FD_SET(s, &rfds);

   tv.tv_sec = (long)timeout;
   tv.tv_usec = 0;

   iResult = select(s, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
   if(iResult > 0)
   {
      return accept(s, NULL, NULL);
   }
   else
   {
     //always here, even if i connect from another application
   }
   return 0;
}

Как это исправить? Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос