Czy istnieje crossoversplatform dusza do zaakceptowania klienta przy użyciu funkcji accept
bez ustawienia gniazda na nieblokowanie?Jak zaakceptować gniazdo z limitem czasu
Wiem, że powinienem użyć funkcji select
, ale co robię źle?
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;
}
Jak to naprawić? Dzięki!
@ryanbwork nie, limit czasu to 10 – Boris
Zobacz poniżej moje rozwiązanie? – ryanbwork
czy od razu wyskoczył z zaznaczenia, czy czeka 10 s przed pojawieniem się (jeśli nie łączysz się z nim)? wygląda dobrze (poza wymienionym s + 1 dla platform innych niż Windows), coś jeszcze jest nie w porządku ... – mark