β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ alarm ΠΈ ΡΠΈΠ³Π½Π°Π» SIGALRM.
β ΠΠ°Π΄Π°ΡΡ ΠΏΡΠ΅Π΄Π΅Π» Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΈ select.
β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΎΠΊΠ΅ΡΠ° SO_RCVTIMEO ΠΈ SO_SNDTIMEO.
ΠΠ΅ΡΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π½ΠΎ ΠΎΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 20.5, ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π³ΠΎΠ½ΠΎΠΊ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ select ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ (Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ Π² Π½Π΅ΠΉ ΠΏΡΠ΅Π΄Π΅Π»ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ) Π²ΠΌΠ΅ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ read, write ΠΈΠ»ΠΈ connect. ΠΡΡΠ³Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΎΠΊΠ΅ΡΠ° β ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΡΠ° Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π΅ Π²ΡΠ΅ΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ.
Π€ΡΠ½ΠΊΡΠΈΠΈ recvmsg ΠΈ sendmsg ΡΠ²Π»ΡΡΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠΌΠΈ ΠΈΠ· ΠΏΡΡΠΈ Π³ΡΡΠΏΠΏ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. ΠΠ½ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ ΡΠ΅Π»ΡΠΉ ΡΡΠ΄ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΡΠ²ΠΎΠΉΡΡΠ²Π΅Π½Π½ΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡΠΌ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ»Π°Π³ MSG_xxx (ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ recv ΠΈ send), Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π²Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ° (ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom ΠΈ sendto), ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π±ΡΡΠ΅ΡΠΎΠ² (ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ readv ΠΈ writev). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π΄Π²Π΅ Π½ΠΎΠ²ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ: Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³ΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ .
Π ΡΠ΅ΠΊΡΡΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π΄Π΅ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΡΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ , ΡΠ΅ΡΡΡ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π² IPv6. ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΈΠ΄Π΅Ρ ΡΡΡΡΠΊΡΡΡΠ° cmsghdr, Π·Π°Π΄Π°ΡΡΠ°Ρ Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Ρ, ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΈ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ . ΠΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ ΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° CMSG_, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ .
Π‘ΠΎΠΊΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π‘, Π½ΠΎ ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ²Π΅Π½Ρ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΊ ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠ΅ΠΌΡΡΡ Π² TCP. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎΠΊΠ΅Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ, ΠΎΠ±ΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°.
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΎΠΏΡΠΎΡΠ° ΡΠΎΠ±ΡΡΠΈΠΉ Π±Π΅Π· Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² Π½Π° select ΠΈ poll. ΠΠ΅ ΡΡΠΎΠΈΡ ΡΠ²Π»Π΅ΠΊΠ°ΡΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠΈΠ²Π°ΡΡ ΡΠΈΡΠΊ Π½Π΅ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ
1. Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 14.1, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄Π»Ρ ΡΠΈΠ³Π½Π°Π»Π° SIGALRM?
2. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 14.1 ΠΌΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ°ΠΉΠΌΠ΅Ρ alarm. ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ alarm Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π·Π°Π΄Π°Π²Π°Π»ΠΎΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ connect Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
3. ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ Π»ΠΈΡΡΠΈΠ½Π³ 11.5 ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ read Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ recv Ρ ΡΠ»Π°Π³ΠΎΠΌ MSG_PEEK. ΠΠΎΠ³Π΄Π° ΠΎΠ½Π° Π·Π°Π²Π΅ΡΡΠΈΡΡΡ, Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ioctl Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ FIONREAD ΠΈ Π²ΡΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠΈΡΠ»ΠΎ Π±Π°ΠΉΡΠΎΠ², ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π² Π±ΡΡΠ΅ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ° ΡΠΎΠΊΠ΅ΡΠ°. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ read Π΄Π»Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
4. Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΎΡΡΠ°Π²ΡΠΈΠΌΠΈΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ, Π΄ΠΎΠΉΠ΄Ρ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ main, Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ exit?
5. ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π΄Π²ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅ Π»ΠΈΡΡΠΈΠ½Π³Π° 14.6, ΠΈ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ»Π°Π²Π° 15
ΠΠΎΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Unix
15.1. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠΎΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Unix β ΡΡΠΎ Π½Π΅ Π½Π°Π±ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ², Π° ΡΠΏΠΎΡΠΎΠ± ΡΠ²ΡΠ·ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠ·Π»Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΠΎΡ ΠΆΠ΅ API, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ·Π»Π°Ρ , β ΡΠΎΠΊΠ΅ΡΡ ΠΈΠ»ΠΈ XTI. ΠΠΎΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Unix ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ IPC (Interprocess Communications β Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²), ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ Π²ΡΠΎΡΠΎΠΉ ΡΠΎΠΌ[2] ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΠ·Π»Π΅. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ ΡΠΎΠΊΠ΅ΡΠΎΠ² Unix Π² ΡΠ΄ΡΠ΅, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠ΅ΠΌ ΠΎΡ ΠΠ΅ΡΠΊΠ»ΠΈ, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ Π² ΡΡΠ΅ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ [112].
Π Π΄ΠΎΠΌΠ΅Π½Π΅ Unix ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° ΡΠΎΠΊΠ΅ΡΠΎΠ²: ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠ΅ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΡΠΎΠΊΠ΅ΡΠ°ΠΌ TCP) ΠΈ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΡΠΎΠΊΠ΅ΡΠ°ΠΌ UDP). Π₯ΠΎΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Ρ, Π½ΠΎ Π΅Π³ΠΎ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π»Π°ΡΡ, ΠΎΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ Π°Π²ΡΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² POSIX.
ΠΠΎΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠΊΠ΅ΡΡ Unix ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎ ΡΡΠ΅ΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ.
1. Π ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ , ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΡ ΠΎΡ ΠΠ΅ΡΠΊΠ»ΠΈ, Π΄ΠΎΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠΊΠ΅ΡΡ Unix ΡΠ°ΡΡΠΎ Π²Π΄Π²ΠΎΠ΅ Π±ΡΡΡΡΠ΅Π΅ ΡΠΎΠΊΠ΅ΡΠΎΠ² TCP, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π° ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΡΠ·Π»Π΅ [112, Ρ. 223β224]. ΠΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ: X Window System. ΠΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ X11 Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ X11, ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ DISPLAY, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°Π΄Π°Π΅Ρ ΠΈΠΌΡ ΡΠ·Π»Π° ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΎΠΊΠ½ΠΎ ΠΈ ΡΠΊΡΠ°Π½. ΠΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΡΠ·Π»Π΅, ΡΡΠΎ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Unix, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ TCP.
2. ΠΠΎΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠΊΠ΅ΡΡ Unix ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΡΠ·Π»Π΅. ΠΡΠΈΠΌΠ΅Ρ ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 15.7.
3. ΠΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ ΡΠΎΠΊΠ΅ΡΠΎΠ² Unix ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π³ΡΡΠΏΠΏΡ) ΡΠ΅ΡΠ²Π΅ΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. ΠΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΡΡΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 15.8.
ΠΠ΄ΡΠ΅ΡΠ° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π² Π΄ΠΎΠΌΠ΅Π½Π΅ Unix, β ΡΡΠΎ ΠΏΠΎΠ»Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π² ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ IPv4 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈ 16-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΠΏΠΎΡΡΠΎΠ² Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ², Π° IPv6 Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ 128-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈ 16-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΠΏΠΎΡΡΠΎΠ². ΠΡΠΈ ΠΏΠΎΠ»Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Unix: Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΈΡΠ°ΡΡ ΠΈΠ· ΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² Π½ΠΈΡ . ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΠ°Ρ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ Ρ Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΌ ΡΠΎΠΊΠ΅ΡΠΎΠΌ Unix.
15.2. Π‘ΡΡΡΠΊΡΡΡΠ° Π°Π΄ΡΠ΅ΡΠ° Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° Unix
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 15.1[1] ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΡΡΡΠΊΡΡΡΠ° Π°Π΄ΡΠ΅ΡΠ° Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° Unix, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠ°Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° <sys/un.h>.
ΠΠΈΡΡΠΈΠ½Π³ 15.1. Π‘ΡΡΡΠΊΡΡΡΠ° Π°Π΄ΡΠ΅ΡΠ° Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° Unix: sockaddr_un
struct sockaddr_un {
uint8_t sun_len;
sa_family_t sun_family; /* AF_LOCAL */
char sun_path[104]; /* ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ, ΠΎΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ΅Π΅ΡΡ Π½ΡΠ»Π΅ΠΌ */
};
ΠΠ ΠΠΠΠ§ΠΠΠΠPOSIX Π½Π΅ Π·Π°Π΄Π°Π΅Ρ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° sun_path ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π΅Ρ, ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ± ΡΡΠΎΠΉ Π΄Π»ΠΈΠ½Π΅. ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ sizeof Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΡΡΠΎΡ ΠΌΠ°ΡΡΠΈΠ². ΠΠ»ΠΈΠ½Π°, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π±ΡΠ΄Π΅Ρ Π³Π΄Π΅-ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ 92 ΠΈ 108. ΠΡΠΈΡΠΈΠ½Π° ΡΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ β Π² Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΡΠ΅ΠΌ Π΅ΡΠ΅ Π² 4.2BSD, Π³Π΄Π΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ, ΡΡΠΎΠ±Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΠΎΠΌΠ΅ΡΠ°Π»Π°ΡΡ Π² 128-Π±Π°ΠΉΡΠΎΠ²ΡΠΉ Π±ΡΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ΄ΡΠ° mbuf.
ΠΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ, Ρ ΡΠ°Π½ΠΈΠΌΠΎΠ΅ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ sun_path, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ Π½ΡΠ»Π΅ΠΌ. ΠΠΌΠ΅Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΎΡ SUN_LEN, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ sockaddr_un ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π»ΠΈΠ½Ρ ΡΡΡΡΠΊΡΡΡΡ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΡΠ»ΠΎ Π½Π΅ΠΏΡΡΡΡΡ Π±Π°ΠΉΡΠΎΠ² Π² ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ. ΠΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ, ΡΠΎ Π΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ sun_path[0] Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°Π²Π΅Π½ Π½ΡΠ»Ρ. ΠΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ INADDR_ANY ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° IPv4 ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ IN6ADDR_ANY_INIT ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° IPv6 Π΄Π»Ρ Π΄ΠΎΠΌΠ΅Π½Π° Unix.
ΠΠ ΠΠΠΠ§ΠΠΠΠΠ POSIX Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°ΠΌ Unix Π΄Π°Π»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Β«Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ IPCΒ», ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Unix. ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° AF_UNIX ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ AF_LOCAL. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠΌΠΈΠ½ Β«Π΄ΠΎΠΌΠ΅Π½ UnixΒ», ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΡΠ°Π» ΠΈΠΌΠ΅Π½Π΅ΠΌ Π΄Π΅-ΡΠ°ΠΊΡΠΎ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΏΠΎΠΏΡΡΠΊΡ POSIX ΠΈΡΠΊΠ»ΡΡΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΡΡΡΠΊΡΡΡΠ° Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΡΡΡΠΈΠΊΡ _un!
ΠΡΠΈΠΌΠ΅Ρ: ΡΡΠ½ΠΊΡΠΈΡ bind ΠΈ Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Unix
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 15.2, ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Unix, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ bind ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Ρ Π½ΠΈΠΌ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ getsockname ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ.
ΠΠΈΡΡΠΈΠ½Π³ 15.2. Π‘Π²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΌ ΡΠΎΠΊΠ΅ΡΠΎΠΌ Unix
unixdomain/unixbind.c
1 #include "unp.h"
2 int
3 main(int argc, char **argv)
4 {
5 int sockfd;
6 socklen_t len;
7 struct sockaddr_un addr1, addr2;
8 if (argc != 2)
9 err_quit("usage: unixbind <pathname>");
10 sockfd = Socket(AF_LOCAL, SOCK_STREAM, 0);
11 unlink(argv[1]); /* ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ */
12 bzero(&addr1, sizeof(addr1));
13 addr1.sun_family = AF_LOCAL;