Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²Π΅ΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ str_cli
ΠΡΠ°ΠΊ, ΠΌΡ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ str_cli. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΌΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π΄Π»Ρ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 26.1). Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ»ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΎ 2000 ΡΡΡΠΎΠΊ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Solaris ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΎΠΌ RTT, ΡΠ°Π²Π½ΡΠΌ 175 ΠΌΡ:
β 354,0 Ρ, ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 5.4);
β 12,3 Ρ, ΡΡΠ½ΠΊΡΠΈΡ select ΠΈ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΉ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 6.2);
β 6,9 Ρ, Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΉ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 16.1);
β 8,7 Ρ, ΡΡΠ½ΠΊΡΠΈΡ fork (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 16.6);
β 8,5 Ρ, Π²Π΅ΡΡΠΈΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 26.1).
ΠΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΌ Π²Π²ΠΎΠ΄ΠΎΠΌ-Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΡΡΠΈ Π²Π΄Π²ΠΎΠ΅ Π±ΡΡΡΡΠ΅Π΅ Π²Π΅ΡΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΉ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ select. ΠΠ°ΡΠ° ΠΏΡΠΎΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ fork ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π²Π΅ΡΡΠΈΠΈ Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΌ Π²Π²ΠΎΠ΄ΠΎΠΌ- Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΈΡΡΠ²Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠ΄Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ fork, ΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄.
16.3. ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ connect
ΠΠΎΠ³Π΄Π° ΡΠΎΠΊΠ΅Ρ TCP ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΉ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ connect, ΠΎΠ½Π° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ EINPROGRESS, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠ΅Ρ ΡΡΠ°ΠΏΠ½ΠΎΠ΅ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΠ΅ TCP ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ. ΠΠ°Π»Π΅Π΅ ΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ select ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΎΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ connect Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΡΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ :
1. Π’ΡΠ΅Ρ ΡΡΠ°ΠΏΠ½ΠΎΠ΅ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Π»ΠΎΠΆΠΈΡΡΡΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ connect ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ RTT (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 2.5), ΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΡΡΡ ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ Π΄ΠΎ ΡΠΎΡΠ΅Π½ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅ΠΊΡΠ½Π΄ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ. ΠΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
2. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ. ΠΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΡΠΆΠ΅ ΡΡΠ°Π» ΠΏΠΎΠΏΡΠ»ΡΡΠ΅Π½ Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ Π²Π΅Π±-Π±ΡΠ°ΡΠ·Π΅ΡΠ°ΠΌ, ΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 16.5.
3. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΆΠ΄Π΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ select, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ ΠΏΡΠ΅Π΄Π΅Π» Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ select, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΡΠ°ΠΉΠΌ-Π°ΡΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ connect. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΡΠ°ΠΉΠΌ-Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ connect Π»Π΅ΠΆΠΈΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΡ 75 Ρ Π΄ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠΈΠ½ΡΡ. ΠΡΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½ΡΠΆΠ΅Π½ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠ°ΠΉΠΌ-Π°ΡΡ, ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ connect. Π ΡΠ°Π·Π΄Π΅Π»Π΅ 14.2 ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠΌ-Π°ΡΡΠ° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ.
ΠΠ°ΠΊ Π±Ρ ΠΏΡΠΎΡΡΠΎ Π½ΠΈ Π²ΡΠ³Π»ΡΠ΄Π΅Π»Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ connect, Π΅ΡΡΡ ΡΡΠ΄ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ.
β ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΎΠΊΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΌ, ΡΠΎ ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ²Π΅Ρ, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΡ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΡΠ·Π»Π΅, ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ connect.
β Π ΠΠ΅ΡΠΊΠ»ΠΈ-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ (Π° ΡΠ°ΠΊΠΆΠ΅ POSIX) ΠΈΠΌΠ΅ΡΡΡΡ Π΄Π²Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΎΡΠ½ΠΎΡΡΡΠΈΡ ΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ select ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ connect: Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΌ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ [128, Ρ. 531], ΠΈ Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΌ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ [128, Ρ. 530].
ΠΠ ΠΠΠΠ§ΠΠΠΠΠΡΠΈ Π΄Π²Π° ΠΏΡΠ°Π²ΠΈΠ»Π° Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ select Π²ΡΠΏΠ°Π΄Π°ΡΡ ΠΈΠ· ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΡΠ΄Π° Π½Π°ΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° 6.3 ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠΉ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΌ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ. Π ΡΠΎΠΊΠ΅Ρ TCP ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ΅ΡΡΠ° Π² Π±ΡΡΠ΅ΡΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ (ΡΡΠΎ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π΅ΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π°ΠΏΠΈΡΠ°Π»ΠΈ Π² ΡΠΎΠΊΠ΅Ρ) ΠΈ ΡΠΎΠΊΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΌ (ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ ΡΡΠ΅Ρ ΡΡΠ°ΠΏΠ½ΠΎΠ΅ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΠ΅). ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΈΡΠ°ΡΡ ΠΈΠ· ΡΠΎΠΊΠ΅ΡΠ° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² ΡΠΎΠΊΠ΅Ρ.
Π‘ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ connect ΡΠ²ΡΠ·Π°Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΡΠΌΠ΅ΡΠΈΠΌ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ .
16.4. ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ connect: ΠΊΠ»ΠΈΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°ΡΡ
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 16.7 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ connect_nonb, Π²ΡΠ·ΡΠ²Π°ΡΡΠ°Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡ connect. ΠΡ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ connect, ΠΈΠΌΠ΅ΡΡΠΈΠΉΡΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.1, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠΎΠ΄Π°:
if (connect_nonb(sockfd, (SA*)&servaddr, sizeof(servaddr), 0) < 0)
err_sys("connect error");
ΠΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ connect, Π° ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΡΡΠΎ ΡΠΈΡΠ»ΠΎ ΡΠ΅ΠΊΡΠ½Π΄, Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΆΠ΄Π΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠ°ΠΉΠΌ- Π°ΡΡΠ° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ select; ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ TCP ΡΠ΄ΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠΌ-Π°ΡΡ.
ΠΠΈΡΡΠΈΠ½Π³ 16.7. ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ connect
//lib/connect_nonb.c
1 #include "unp.h"
2 int
3 connect_nonb(int sockfd, const SA *saptr, socklen_t salen, int nsec)
4 {
5 int flags, n, error;
6 socklen_t len;
7 fd_set rset, wset;
8 struct timeval tval;
9 flags = Fcntl(sockfd, F_GETFL, 0);
10 Fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
11 error = 0;
12 if ((n = connect(sockfd, saptr, salen)) < 0)
13 if (errno != EINPROGRESS)
14 return (-1);
15 /* ΠΠΎΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π½ΡΡΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ Π΄ΡΡΠ³ΠΈΠΌ */
16 if (n == 0)
17 goto done; /* ΡΡΠ½ΠΊΡΠΈΡ connect Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ */
18 FD_ZERO(&rset);
19 FDSET(sockfd, &rset);
20 wset = rset;
21 tval.tv_sec = nsec;
22 tval.tv_usec = 0;
23 if ((n = Select(sockfd + 1, &rset, &wset, NULL,
24 nsec ? &tval : NULL)) == 0) {
25 close(sockfd); /* ΡΠ°ΠΉΠΌ-Π°ΡΡ */
26 errno = ETIMEDOUT;
27 return (-1);
28 }
29 if (FD_ISSET(sockfd, &rset) || FD_ISSET(sockfd, &wset)) {
30 len = sizeof(error);
31 if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
32 return (-1); /*Π² Solaris ΠΎΡΠΈΠ±ΠΊΠ°, ΠΎΠΆΠΈΠ΄Π°ΡΡΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ */
33 } else
34 err_quit("select error: sockfd not set");
35 done:
36 Fcntl(sockfd, F_SETFL, flags); /* Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ»Π°Π³ΠΈ, Π·Π°Π΄Π°ΡΡΠΈΠ΅ ΡΡΠ°ΡΡΡ ΡΠ°ΠΉΠ»Π° */
37 if (error) {
38 close(sockfd); /* Π½Π° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ */
39 errno = error;
40 return (-1);
41 }
42 return (0);
43 }
ΠΠ°Π΄Π°Π½ΠΈΠ΅ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ°9-10 ΠΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ fcntl, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎΠΊΠ΅Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΌ.
11-14 ΠΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡ connect. ΠΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ (EINPROGRESS), ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π°ΡΠ°Π»ΠΎΡΡ, Π½ΠΎ Π΅ΡΠ΅ Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΎΡΡ [128, Ρ. 466]. ΠΡΠ±Π°Ρ Π΄ΡΡΠ³Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ15 ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°ΡΡ Π²ΡΠ΅, ΡΡΠΎ Π·Π°Ρ ΠΎΡΠΈΠΌ, ΠΎΠΆΠΈΠ΄Π°Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ16-17 ΠΡΠ»ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ connect Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠ»Π° Π½ΡΠ»Ρ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΎΡΡ. ΠΠ°ΠΊ ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ²Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΡΠ·Π»Π΅, ΡΡΠΎ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ.
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ select18-24 ΠΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ select ΠΈ ΠΆΠ΄Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠΊΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π³ΠΎΡΠΎΠ² Π»ΠΈΠ±ΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, Π»ΠΈΠ±ΠΎ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ. ΠΡ ΠΎΠ±Π½ΡΠ»ΡΠ΅ΠΌ rset, Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π±ΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ sockfd Π² ΡΡΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ rset Π² wset. ΠΡΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠ½ΡΠΌ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π°Π±ΠΎΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΊΠ°ΠΊ ΡΡΡΡΠΊΡΡΡΡ. ΠΠ°Π»Π΅Π΅ ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ timeval ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ select. ΠΡΠ»ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°Π΄Π°Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½ΡΠ»Π΅Π²ΡΠΌ (ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌ-Π°ΡΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°Π΄Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ select ΠΏΡΡΡΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π° Π½Π΅ ΡΡΡΡΠΊΡΡΡΡ timeval Ρ Π½ΡΠ»Π΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ (ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΌ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΆΠ΄Π΅ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅).
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°ΠΉΠΌ-Π°ΡΡΠΎΠ²25-28 ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ select Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΡΠ»Ρ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΈΡΡΠ΅ΠΊΠ»ΠΎ, ΠΈ ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ ETIMEDOUT. ΠΡ ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠΊΠ΅Ρ, ΡΡΠΎΠ±Ρ ΡΡΠ΅Ρ ΡΡΠ°ΠΏΠ½ΠΎΠ΅ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΠ΅ Π½Π΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΎΡΡ.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ29-34 ΠΡΠ»ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³ΠΎΡΠΎΠ² Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ, ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ getsockopt, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΡΠΎΠΊΠ΅ΡΠ° (SO_ERROR), ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΠ»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΎΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π½ΡΠ»Π΅Π²ΡΠΌ. ΠΡΠ»ΠΈ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ECONNREFUSED, ETIMEDOUT ΠΈ Ρ.Π΄.). ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ Π½Π°ΡΠ΅ΠΉ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ. ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΠ΅ΡΠΊΠ»ΠΈ-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ getsockopt Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½ΡΠ»Ρ, Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΠΎΠΆΠΈΠ΄Π°ΡΡΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π½Π°ΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ error. ΠΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Solaris ΡΠ°ΠΌΠ° ΡΡΠ½ΠΊΡΠΈΡ getsockopt Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ -1, Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ errno ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΎΠΆΠΈΠ΄Π°ΡΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. Π Π½Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΎΠ±Π° ΡΡΠ΅Π½Π°ΡΠΈΡ.