Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Zpracování chyb soketů v MS Windows
cpp net
24. března 2003, 00.00 | Dnes si ukážeme jak rozpoznat a ošetřit chyby soketů v operačním systému Windows. Popíšeme si funkce WSAGetLastError a WSASetLastError. Předvedeme si příklad na funkci listen.
Zpracování chyb soketů v MS WindowsV dnešním článku se podíváme na způsob detekování chyb soketových funkcí. Jedná se o velice jednoduché téma. Možná až trapně jednoduché (v podstatě si ukážeme jen dvě jednoduché funkce). Myslím ale, že pro člověka, který se sokety začíná, je rozumné se s funkcemi WSAGetLastError a WSASetLastError seznámit.
V mých článcích jsem dodnes popsal mnoho soketových funkcí. Vždy jsem uvedl jak poznat, že funkce proběhla bez chyb. Většinou se jedná o přečtení návratové hodnoty funkce, která nám oznámila, jestli operace proběhla bez chyby nebo s chybou. Například jsem napsal, že funkce gethostbyname vrací v případě chyby NULL. Nebo funkce connect vrací v případě chyby hodnotu makra SOCKET_ERROR. Nám ale mnohdy nestačí zjistit, že došlo k chybě. Zajímá nás ještě k jaké chybě došlo.
Funkce WSAGetLastErrorJestliže návratová hodnota nějaké soketové funkce oznamuje chybu, můžeme zavolat funkci WSAGetLastError a získat tak kód chyby. Význam chybového kódu zjistíme vždy z dokumentace dané funkce. Seznam všech chybových stavů soketů je na adrese http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/windows_sockets_error_codes_2.asp.
- int WSAGetLastError(void); - funkce vrací chybový kód poslední soketové funkce, která neproběhla úspěšně.
Funkce nám umožní nastavit chybový kód, který vrátí funkce WSAGetLastError při příštím zavolání. Jestliže mezi voláním WSASetLastError a WSAGetLastError je volána soketová funkce, která skončí chybou, bude WSAGetLastError vracet kód poslední chyby, nikoliv kód nastavený funkcí WSASetLastError. Má-li naše aplikace více vláken, zavolání funkce WSASetLastError nebo chyba v soketové funkci v jednom vlákně nemá vliv na výsledek volání WSAGetLastError ve vláknech jiných. Hlavička funkce:
- void WSASetLastError(int iError); - parametrem je chybový kód, který vrátí WSAGetLastError.
Jako příklad si uvedeme kousek zdrojového textu, který nám ošetří chyby, které mohou vzniknout při volání funkce listen.
|
Tím jsme si ukázali, jak identifikovat a ošetřit chyby soketových funkcí. Dnes není nic ke stažení. Bylo by zbytečné vytvářet nějaké příklady. Zdrojový text z článku si můžete sami vepsat do mých příkladů z předchozích článků. V programech by měly být ošetřeny všechny možné chyby. Já to ale ve svých budoucích článcích dělat nebudu. Mé příklady jsou jednoduché ukázky a nechci je mít příliš složité a nepřehledné.
Obsah seriálu (více o seriálu):
- Sokety a C++
- Překlad doménových jmen v Linuxu
- Překlad doménových jmen v MS Windows
- TCP klient v Linuxu
- TCP klient v MS Windows
- TCP server v Linuxu
- TCP server v MS Windows
- Protokol UDP 1.část
- Protokol UDP 2.část
- Zpracování chyb soketů v Linuxu
- Zpracování chyb soketů v MS Windows
Diskuse k článku
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007