Zdravím,
mám problém s následujícím zdrojákem, který má za úkol navázet spojení za pomoci neblokovacího režimu (v IPv6). Problém nastává u select, kdy je vždy vrácena hodnota větší než 0, i když daná adresa v síti vůbec není nebo na ní nic nenaslouchá na připojení.
Díky za rady.
for(ptr=result; ptr != NULL; ptr=ptr->ai_next)
{
sock_client = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);
if(sock_client == -1)
{
chyba();
}
nastaveni_soc = fcntl(sock_client, F_GETFL, 0);
if(fcntl(sock_client, F_SETFL, nastaveni_soc | O_NONBLOCK) == -1)
{
chyba();
}
FD_ZERO(&sada);
FD_SET(sock_client, &sada);
timeout.tv_sec = 5;
timeout.tv_usec = 0;
i = connect(sock_client, ptr->ai_addr, (int)ptr->ai_addrlen);
if(i == 0)
{
if(fcntl(sock_client, F_SETFL, nastaveni_soc) == -1)
{
chyba();
}
continue;
}
if(i < 0)
{
if(errno != EINPROGRESS)
{
if(fcntl(sock_client, F_SETFL, nastaveni_soc) == -1)
{
chyba();
}
break;
}
}
i = select(sock_client + 1, NULL, &sada, NULL, &timeout);
if(i < 0)
{
if(fcntl(sock_client, F_SETFL, nastaveni_soc) == -1)
{
chyba();
}
continue;
}
if(i == 0)
{
cout << "Trying again";
}
if(i > 0)
{
cout << ....
}
if(fcntl(sock_client, F_SETFL, nastaveni_soc) == -1)
{
chyba();
}
break;
}