5. ΠΠΎΠ»ΡΡΠΈΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π² ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ (ΡΠΌ. ΠΏΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅) ΠΈ ΠΎΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ sock (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» Π.3). Π‘Π½Π°ΡΠ°Π»Π° ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΡΠΉΡΠ΅ ΡΠ²ΠΎΠΉ ΡΠ·Π΅Π» ΠΊΠ°ΠΊ ΡΠ·Π΅Π», Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ, Π·Π°ΡΠ΅ΠΌ β ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ SO_REUSEPORT, ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΊΠ°ΠΊ ΡΠ·Π΅Π», ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° SO_REUSEPORT. ΠΠΎΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ sock Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° TCP (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -s ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ) Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΅, ΡΠ²ΡΠ·ΡΠ²Π°Ρ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π²Π°ΡΠ΅Π³ΠΎ ΡΠ·Π»Π° ΠΈ Π°Π΄ΡΠ΅Ρ Π·Π°ΠΊΠΎΠ»ΡΡΠΎΠ²ΠΊΠΈ (loopback address). ΠΡΠΆΠ½ΠΎ Π»ΠΈ Π²Π°ΠΌ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ SO_REUSEADDR (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -Π ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ)? ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ netstat Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΎΠΊΠ΅ΡΠΎΠ².
6. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ UDP (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -u ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ) ΠΈ ΠΏΠΎΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΄Π²Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ IP-Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΈ ΠΏΠΎΡΡΠΎΠΌ. ΠΡΠ»ΠΈ Π²Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ SO_REUSEPORT, ΠΏΠΎΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅ (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -T ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ).
7. ΠΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΠΈΠ»ΠΈΡΡ ping ΠΈΠΌΠ΅ΡΡ ΡΠ»Π°Π³ -d, Π·Π°Π΄Π°ΡΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎΠΊΠ΅ΡΠ° SO_DEBUG. Π ΡΠ΅ΠΌ Π΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅?
8. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΊΠΎΠ½ΡΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠΊΠ΅ΡΠ° TCP_NODELAY, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄Π²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ write: ΠΏΠ΅ΡΠ²ΡΡ Π΄Π»Ρ 4 Π±Π°ΠΉΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π²ΡΠΎΡΡΡ Π΄Π»Ρ 396 Π±Π°ΠΉΡ. Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ACK β 100 ΠΌΡ, ΠΏΠ΅ΡΠΈΠΎΠ΄ RTT ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΠ°Π²Π΅Π½ 100 ΠΌΡ, Π° Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° β 50 ΠΌΡ. ΠΠ°ΡΠΈΡΡΠΉΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΠ°Π³Π»Π° Ρ Π·Π°Π΄Π΅ΡΠΆΠ°Π½Π½ΡΠΌΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ACK.
9. Π‘Π½ΠΎΠ²Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅, ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎΠΊΠ΅ΡΠ° TCP_NODELAY.
10. Π‘Π½ΠΎΠ²Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 8, ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ writev ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ Π±ΡΡΠ΅ΡΠΎΠ² (4-Π±Π°ΠΉΡΠΎΠ²ΠΎΠ³ΠΎ ΠΈ 396-Π±Π°ΠΉΡΠΎΠ²ΠΎΠ³ΠΎ).
11. ΠΡΠΎΡΡΠΈΡΠ΅ RFC 1122 [10], ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π΄Π»Ρ Π·Π°Π΄Π΅ΡΠΆΠ°Π½Π½ΡΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ² ACK.
12. Π ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π²Π΅ΡΡΠΈΠΉ Π½Π°Ρ ΡΠ΅ΡΠ²Π΅Ρ ΡΡΠ°ΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ β Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5.1 ΠΈΠ»ΠΈ 5.2? Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎΠΊΠ΅ΡΠ° SO_KEEPALIVE, ΡΠ΅ΡΠ΅Π· ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠ·Π΅Π» ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΡΡΡΠΎΡ ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ?
13. Π ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π²Π΅ΡΡΠΈΠΉ Π½Π°Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΡΠ°ΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ β Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5.3 ΠΈΠ»ΠΈ 5.4? Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎΠΊΠ΅ΡΠ° SO_KEEPALIVE, ΡΠ΅ΡΠ΅Π· ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈ ΡΠ·Π΅Π» ΡΠ΅ΡΠ²Π΅ΡΠ° Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΡΡΡΠΎΡ ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ?
14. Π ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π²Π΅ΡΡΠΈΠΉ Π½Π°Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΡΠ°ΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ β Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5.3 ΠΈΠ»ΠΈ 6.2? Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎΠΊΠ΅ΡΠ° SO_KEEPALIVE, ΡΠ΅ΡΠ΅Π· ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈ ΡΠ·Π΅Π» ΡΠ΅ΡΠ²Π΅ΡΠ° Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΡΡΡΠΎΡ ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ?
15. ΠΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎΠΊΠ΅ΡΠ° SO_KEEPALIVE. ΠΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, Π½ΠΎ ΡΠ΅ΡΠ΅Π· ΡΡΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ ΡΡΠ»ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ 2 Ρ ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ²ΡΠ·ΠΈ, ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ TCP ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠΈ?
16. ΠΠΎΡΡΠΈ Π²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ SO_ACCEPTCONN Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ <sys/socket.h>, Π½ΠΎ ΠΌΡ Π½Π΅ ΠΎΠΏΠΈΡΡΠ²Π°Π»ΠΈ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠΎΡΡΠΈΡΠ΅ [69], ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, Π·Π°ΡΠ΅ΠΌ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΠ»Π°Π²Π° 8
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠΎΠΊΠ΅ΡΠ°Ρ UDP
8.1. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ TCP ΠΈ UDP, ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ UDP ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ, Π½Π΅ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π½Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΈ ΡΡΠΈΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ Π½Π΅ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠ° Π±Π°ΠΉΡΠΎΠ² TCP. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ UDP Π²ΠΌΠ΅ΡΡΠΎ TCP. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 22.4. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ UDP, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ DNS (Domain Name System β ΡΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ ΠΈΠΌΠ΅Π½), NFS (ΡΠ΅ΡΠ΅Π²Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° β Network File System) ΠΈ SNMP (Simple Network Management Protocol β ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡ).
ΠΠ° ΡΠΈΡ. 8.1 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠΈΠΏΠΈΡΠ½ΠΎΠΉ ΡΡ Π΅ΠΌΡ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ UDP. ΠΠ»ΠΈΠ΅Π½Ρ Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ Π»ΠΈΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ sendto (ΠΎΠ½Π° ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅), ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ (ΡΠ΅ΡΠ²Π΅ΡΠ°) Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅Ρ Π»ΠΈΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ recvfrom, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΆΠ΄Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠ΄ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. Π€ΡΠ½ΠΊΡΠΈΡ recvfrom Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°Π΄ΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°) Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠΎΠΉ, ΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΡΠ²Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΡΠ»Π°Π» Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ.
Π ΠΈΡ. 8.1. Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠΊΠ΅ΡΠ° Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ UDP
Π ΠΈΡΡΠ½ΠΎΠΊ 8.1 ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ ΡΠΈΠΏΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΎΠ±ΠΌΠ΅Π½Π° UDP-Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠ°Π²Π½ΠΈΡΡ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΡΠΈΠΏΠΈΡΠ½ΡΠΌ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ TCP, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½ΡΠΌ Π½Π° ΡΠΈΡ. 4.1.
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΠΎΠΏΠΈΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ Ρ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ UDP, β recvfrom ΠΈ sendto, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»Π°Π΅ΠΌ Π½Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ UDP. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ connect Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ UDP ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
8.2. Π€ΡΠ½ΠΊΡΠΈΠΈ recvfrom ΠΈ sendto
ΠΡΠΈ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ read ΠΈ write, Π½ΠΎ ΡΡΠ΅Π±ΡΡΡ ΡΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags,
struct sockaddr *from, socklen_t *addrlen);
ssize_t sendto(int sockfd, const void *buff, size_t nbytes, int flags,
const struct sockaddr *to, socklen_t addrlen);
ΠΠ±Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΡ Π±Π°ΠΉΡΠΎΠ² Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, -1 Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ
ΠΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, sockfd, buff ΠΈ nbytes, ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΡΠ΅ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ read ΠΈ write: Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π±ΡΡΠ΅Ρ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π°ΠΏΠΈΡΡ, ΠΈ ΡΠΈΡΠ»ΠΎ Π±Π°ΠΉΡΠΎΠ² Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ.
ΠΡ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΠ± Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ flags Π² Π³Π»Π°Π²Π΅ 14, Π³Π΄Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ recv, send, recvmsg ΠΈ sendmsg, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅ΠΉΡΠ°Ρ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΠ½ΠΈ Π½Π΅ Π½ΡΠΆΠ½Ρ. ΠΠΎΠΊΠ° ΠΌΡ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ flags Π² Π½ΡΠ»Ρ.
ΠΡΠ³ΡΠΌΠ΅Π½Ρ to Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ sendto β ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, IP-Π°Π΄ΡΠ΅Ρ ΠΈ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ°) Π°Π΄ΡΠ΅ΡΠ°ΡΠ°. Π Π°Π·ΠΌΠ΅Ρ ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° Π·Π°Π΄Π°Π΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ addrlen. Π€ΡΠ½ΠΊΡΠΈΡ recvform Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ from, Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ Π² Π½Π΅Π΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ. Π§ΠΈΡΠ»ΠΎ Π±Π°ΠΉΡΠΎΠ², Ρ ΡΠ°Π½ΡΡΠΈΡ ΡΡ Π² ΡΡΡΡΠΊΡΡΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² ΡΠ΅Π»ΠΎΠΌ ΡΠΈΡΠ»Π΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ addrlen. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ sendto ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom β ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ΅Π»ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΈΠΏΠ° Β«Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅-ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΒ»).
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ Π΄Π²ΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ accept: ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° ΠΏΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Π½Π°ΠΌ, ΠΊΡΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΠ» Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ (Π² ΡΠ»ΡΡΠ°Π΅ UDP) ΠΈΠ»ΠΈ ΠΊΡΠΎ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π» ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ (Π² ΡΠ»ΡΡΠ°Π΅ TCP). ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ sendto Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ Π΄Π²ΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ connect: ΠΌΡ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΡΠ½ΡΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ (Π² ΡΠ»ΡΡΠ°Π΅ UDP) ΠΈΠ»ΠΈ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΡΠ·Π»Π°, Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ (Π² ΡΠ»ΡΡΠ°Π΅ TCP).
ΠΠ±Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»ΠΈΠ½Ρ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΏΡΠΎΡΠΈΡΠ°Π½Ρ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ°Π½Ρ. ΠΡΠΈ ΡΠΈΠΏΠΈΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ΅.
ΠΠ΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½ΡΠ»Π΅Π²ΡΡ Π΄Π»ΠΈΠ½Ρ. Π ΡΠ»ΡΡΠ°Π΅ UDP ΠΏΡΠΈ ΡΡΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ° IP, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ IP (ΠΎΠ±ΡΡΠ½ΠΎ 20 Π±Π°ΠΉΡ Π΄Π»Ρ IPv4 ΠΈΠ»ΠΈ 40 Π±Π°ΠΉΡ Π΄Π»Ρ IPv6), 8-Π±Π°ΠΉΡΠΎΠ²ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ UDP ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π΄Π»Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ: ΠΎΠ½ΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊ Π·Π°ΠΊΡΡΠ» ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠΈ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ read Π½Π° ΡΠΎΠΊΠ΅ΡΠ΅ TCP. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» UDP Π½Π΅ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ Π½Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΡΠΎ Π² Π½Π΅ΠΌ ΠΈ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠ°ΠΊ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ from ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΡΡΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ, ΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄Π»ΠΈΠ½Ρ (addrlen) ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΡΡΡΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ, ΠΈ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π°Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ Π°Π΄ΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ Π΄Π°Π½Π½ΡΡ .