Problém se select – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém se select – C / C++ – Fórum – Programujte.comProblém se select – C / C++ – Fórum – Programujte.com

 

Dogmeat
~ Anonymní uživatel
4 příspěvky
21. 7. 2010   #1
-
0
-

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;
}

Nahlásit jako SPAM
IP: 213.192.14.–
Dogmeat
~ Anonymní uživatel
4 příspěvky
22. 7. 2010   #2
-
0
-

Problém už jsem vyřešil, bylo potřeba po select ověřit socket na chybu pomocí getsockopt(), nyní již vše funguje.

Nahlásit jako SPAM
IP: 213.192.14.–
Earl Cash0
Věrný člen
23. 7. 2010   #3
-
0
-

Mohl by jsi hodit zdrojak? Shodou okolnosti neco podobneho ted resim...

Nahlásit jako SPAM
IP: 91.199.164.–
Oh my goodness, shut me down! Machines making machines. How perverse. (C-3PO)
zdenda
~ Anonymní uživatel
257 příspěvků
24. 7. 2010   #4
-
0
-

SO_ERROR

Nahlásit jako SPAM
IP: 213.211.51.–
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žit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

Podobná vlákna

SELECT ze SELECT — založil pavel

SELECT (select... — založil Shockwave

SELECT — založil Row

&lt;select&gt; — založil lolik

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý