17-18 Π€ΡΠ½ΠΊΡΠΈΡ connect, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠ°Ρ ΠΊ ΡΠΎΠΊΠ΅ΡΡ TCP, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ TCP Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, Π°Π΄ΡΠ΅Ρ ΡΠΎΠΊΠ΅ΡΠ° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΡΡΡΡΠΊΡΡΡΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π΄Π°ΡΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ connect, Π° Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΡΠΎΠΊΠ΅ΡΠ° ΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π‘ sizeof.
ΠΠ ΠΠΠΠ§ΠΠΠΠΠ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ unp.h ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ #define SA, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ SA ΠΊΠ°ΠΊ struct sockaddr, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, ΡΡΠΎΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠΊΠ΅ΡΠΎΠ² ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΡΠ°Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡ ANSI Π‘. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΈΠΏ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ void* Π½Π΅ Π±ΡΠ» Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² Π½Π°ΡΠ°Π»Π΅ 80-Ρ , ΠΊΠΎΠ³Π΄Π° ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ "struct sockaddr" Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 15 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΠ°ΡΡΠΎ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΡ ΠΎΠ΄ΠΈΡΡ ΡΡΡΠΎΠΊΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π·Π° ΠΏΡΠ°Π²ΡΡ Π³ΡΠ°Π½ΠΈΡΡ ΡΠΊΡΠ°Π½Π° (ΠΈΠ»ΠΈ Π·Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΊΠ½ΠΈΠ³ΠΈ), ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠΎΠΊΡΠ°ΡΠΈΠ»ΠΈ Π΅Π΅ Π΄ΠΎ SA. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΌΡ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΎΠ±ΡΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠΎΠΊΠ΅ΡΠΎΠ² Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π»ΠΈΡΡΠΈΠ½Π³Π° 3.2.
Π§ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°19-25 ΠΡ ΡΠΈΡΠ°Π΅ΠΌ ΠΎΡΠ²Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° fputs. ΠΡΠΆΠ½ΠΎ Π±ΡΡΡ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ TCP, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ (byte-stream) ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π±Π΅Π· Π³ΡΠ°Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ. ΠΠ±ΡΡΠ½ΠΎ ΠΎΡΠ²Π΅ΡΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ 26-Π±Π°ΠΉΡΠΎΠ²Π°Ρ ΡΡΡΠΎΠΊΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΎΡΠΌΡ:
Fri Jan 12 14:27:52 1996\r\n
Π³Π΄Π΅ \r β ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΊΠ°ΡΠ΅ΡΠΊΠΈ, Π° \n β ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΡΠΎΠΊΠΈ (Π² ΡΠΈΠΌΠ²ΠΎΠ»Π°Ρ ASCII). Π ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΡΡΠΈ 26 Π±Π°ΠΉΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ : Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° TCP, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ Π²ΡΠ΅ 26 Π±Π°ΠΉΡ Π΄Π°Π½Π½ΡΡ , Π»ΠΈΠ±ΠΎ Π² Π²ΠΈΠ΄Π΅ 26 ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π±Π°ΠΉΡΡ Π΄Π°Π½Π½ΡΡ , ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ, Π² ΡΡΠΌΠΌΠ΅ Π΄Π°ΡΡΠ΅ΠΉ 26 Π±Π°ΠΉΡ. ΠΠ±ΡΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ΅Π³ΠΌΠ΅Π½Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ΅ 26 Π±Π°ΠΉΡ, Π½ΠΎ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΌΠ°Ρ Π΄Π°Π½Π½ΡΡ Π½Π΅Π»ΡΠ·Ρ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΎΡΠ²Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° read. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠ· ΡΠΎΠΊΠ΅ΡΠ° TCP Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ read ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈ ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°ΡΡ ΡΠΈΠΊΠ» Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0 (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΠ°Π·ΠΎΡΠ²Π°Π½ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½ΠΎΠΉ), Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ Π½ΡΠ»Ρ (ΠΎΡΠΈΠ±ΠΊΠ°).
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ½Π΅Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, Π·Π°ΠΊΡΡΠ²Π°ΡΡΠΈΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. ΠΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π²Π΅ΡΡΠΈΠ΅ΠΉ 1.0 ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π³ΠΈΠΏΠ΅ΡΡΠ΅ΠΊΡΡΠ° (Hypertext Transfer Protocol, HTTP). Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ° Π·Π°ΠΏΠΈΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² (File Transfer Protocol, FTP) ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠΎΡΡΡ (Simple Mail Transfer Protocol, SMTP) ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΠΊΠΎΠ½Π΅Ρ Π·Π°ΠΏΠΈΡΠΈ 2-Π±Π°ΠΉΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, ΡΠΎΡΡΠΎΡΡΠ΅ΠΉ ΠΈΠ· ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ASCII Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΊΠ°ΡΠ΅ΡΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ. Π‘Π»ΡΠΆΠ±Π° Π²ΡΠ·ΠΎΠ²Π° ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ (Remote Procedure Call, RPC) ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² (Domain Name System, DNS) ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ, ΠΎΡΡΡΠ»Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ TCP, Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π΄Π»ΠΈΠ½Π΅ ΡΡΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ. ΠΠ΄Π΅ΡΡ Π²Π°ΠΆΠ½ΠΎ ΠΎΡΠΎΠ·Π½Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» TCP ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠΊ Π·Π°ΠΏΠΈΡΠ΅ΠΉ: Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΎΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΎΠ΄Π½Ρ ΠΎΡ Π΄ΡΡΠ³ΠΎΠΉ, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ26 Π€ΡΠ½ΠΊΡΠΈΡ exit Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Unix Π²ΡΠ΅Π³Π΄Π° Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΎΡΠΊΡΡΡΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°Ρ ΡΠΎΠΊΠ΅Ρ TCP Π·Π°ΠΊΡΡΡ.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ, ΠΏΠΎΠΊΠ° ΠΌΡ Π»ΠΈΡΡ Π²ΡΠ΄Π΅Π»ΠΈΠ»ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ, Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΉΠΌΠ΅ΠΌΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ.
1.3. ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°
ΠΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½Π°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.1, ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° (protocol dependent) IPv4. ΠΡ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ sockaddr_in, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π°Π΄ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Ρ AF_INET ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ socket ΡΠ°Π²Π½ΡΠΌ AF_INET.
ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π»Π° ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ IPv6, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ΄. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.2 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ, ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ.
ΠΠΈΡΡΠΈΠ½Π³ 1.2. ΠΠ΅ΡΡΠΈΡ Π»ΠΈΡΡΠΈΠ½Π³Π° 1.1 Π΄Π»Ρ IPv6
//intro/daytimetcpcliv6.Ρ
1 #include "unp.h"
2 int
3 main(int argc, char **argv)
4 {
5 int sockfd, n;
6 char recvline[MAXLINE + 1];
7 struct sockaddr_in6 servaddr;
8 if (argc != 2)
9 err_quit("usage: a.out <Ipaddress>");
10 if ((sockfd = socket(AF_INET6, SOCK_STREAM, 0)) < 0)
11 err_sys("socket error");
12 bzero(&servaddr, sizeof(servaddr));
13 servaddr.sin6_family = AF_INET6;
14 servaddr.sin6_port = htons(13); /* ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°ΡΡ */
15 if (inet_pton(AF_INET6, argv[1], &servaddr.sin6_addr) <= 0)
16 err_quit("inet_pton error for %s", argv[1]);
17 if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) < 0)
18 err_sys("connect error");
19 while ((n = read(sockfd, recvline, MAXLINE)) > 0) {
20 recvline[n] = 0; /* ΡΠΈΠΌΠ²ΠΎΠ» ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ */
21 if (fputs(recvline, stdout) == EOF)
22 err_sys("fputs error");
23 }
24 if (n < 0)
25 err_sys("read error");
26 exit(0);
27 }
ΠΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΡ ΡΡΡΠΎΠΊ, Π½ΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° IPv6. ΠΡΡΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° (protocol independent). Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 11.3 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ°Ρ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π²Π΅ΡΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° Π²ΡΠ·ΠΎΠ²Π΅ getaddrinfo ΠΈΠ· tcp_connect.
ΠΡΡΠ³ΠΈΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π²ΠΎΠ΄ΠΈΡΡ IP-Π°Π΄ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΡΠΎΡΠ΅ΡΠ½ΠΎ-Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 206.168.112.219 Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΈ IPv4). ΠΡΠ΄ΡΠΌ ΠΏΡΠΎΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΡΠ΅ΠΌ Ρ ΡΠΈΡΠ»Π°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, www.unpbook.com). Π Π³Π»Π°Π²Π΅ 11 ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΡΠ·Π»ΠΎΠ² Π² IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈ ΠΈΠΌΠ΅Π½ ΡΠ»ΡΠΆΠ± Π² ΠΏΠΎΡΡΡ. ΠΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈ Π½ΠΎΠΌΠ΅ΡΠ° ΠΏΠΎΡΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ ΡΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠΎΠΊΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°ΡΠΈ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ½ΠΈΠΌΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
1.4. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ: ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ
Π Π»ΡΠ±ΠΎΠΉ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.1 ΠΌΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠΈΡΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ Π² Π²ΡΠ·ΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΉ socket, inet_pton, connect, read ΠΈ fputs, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΈΠ±ΠΊΠ° ΡΠ»ΡΡΠ°Π΅ΡΡΡ, ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ err_quit ΠΈ err_sys Π΄Π»Ρ ΠΏΠ΅ΡΠ°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈ Π΄Π»Ρ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π±ΡΠ²Π°Π΅Ρ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅ΡΠ΅ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5.9, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΠ²Π°Π½Π½ΡΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ².
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΊΠΈ β ΡΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΡΠ²Π»Π΅Π½ΠΈΠ΅, ΠΌΡ ΡΠΎΠΊΡΠ°ΡΠΈΠΌ Π½Π°ΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ. Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π½Π°ΠΌΠΈ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ ΠΏΠΈΡΠ΅ΡΡΡ Ρ Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡΠΊΠ²Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
sockfd = Socket(AF_INET, SOCK_STREAM, 0);
ΠΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±Π΅ΡΡΠΊΠ° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ socket ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.3.
ΠΠΈΡΡΠΈΠ½Π³ 1.3. ΠΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±Π΅ΡΡΠΊΠ° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ socket
//lib/wrapsock.c
172 int
173 Socket(int family, int type, int protocol)
174 {
175 int n;
176 if ((n = socket(family, type, protocol)) < 0)
177 err_sys("socket error");
178 return (n);
179 }
Π₯ΠΎΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ-ΠΎΠ±Π΅ΡΡΠΎΠΊ Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠ±ΡΡΠΆΠ΄Π°Ρ ΠΏΠΎΡΠΎΠΊΠΈ (threads) Π² Π³Π»Π°Π²Π΅ 26, ΠΌΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠΌ, ΡΡΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΊΠ°Ρ-Π»ΠΈΠ±ΠΎ ΠΎΡΠΈΠ±ΠΊΠ°, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Unix errno ΡΠ°Π²Π½ΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π΄ΡΠ΅ΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ pthread, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ errno ΡΠ°Π²Π½ΠΎΠΉ ΡΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ err_sys. Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π·Π°Π³ΡΠΎΠΌΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ·ΡΠΊΠ° Π‘ Π·Π°ΠΏΡΡΠ°Ρ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno ΠΈ Π²ΡΠ·ΠΎΠ²Π° err_sys Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: