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)
{
vysl = itoa(errno, vysl, 10);
cout....
vysl = itoa(i, vysl, 10);
cout...
vysl = itoa(sock_client, vysl, 10);
cout...
}
if(fcntl(sock_client, F_SETFL, nastaveni_soc) == -1)
{
chyba();
}
break;
}
Fórum › C / C++
Problém se select
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 85 hostů
Podobná vlákna
Generování obsahu select podle jiného select — založil Genua
SELECT ze SELECT — založil pavel
SELECT (select... — založil Shockwave
<select> — založil lolik
Moderátoři diskuze