ΠΠ½Π΅Π·Π΄Π°, ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΏΠΈΡΠ°ΡΡΠΈΠ΅ΡΡ Π½Π° ΠΎΠ±ΡΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΡΠΎΡΠΌΠ°ΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ² (Π² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°Ρ ), Π³ΡΡΠΏΠΏΠΈΡΡΡΡΡΡ Π² Π΄ΠΎΠΌΠ΅Π½Ρ (ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ·Π»ΠΎΠΌ). Π ΡΠΈΡΡΠ΅ΠΌΠ΅ BSD 4.2 ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄ΠΎΠΌΠ΅Π½Ρ: "UNIX system" β Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ "Internet" (ΠΌΠ΅ΠΆΡΠ΅ΡΠ΅Π²ΠΎΠΉ) β Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° DARPA (Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΎΠΊ ΠΠΈΠ½ΠΈΡΡΠ΅ΡΡΡΠ²Π° ΠΎΠ±ΠΎΡΠΎΠ½Ρ Π‘Π¨Π) (ΡΠΌ. [Postel 80] ΠΈ [Postel 81]). ΠΠ½Π΅Π·Π΄Π° Π±ΡΠ²Π°ΡΡ Π΄Π²ΡΡ ΡΠΈΠΏΠΎΠ²: Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» (ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π³Π½Π΅Π·Π΄ΠΎ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ ΠΠ΅ΡΠΊΠ»ΠΈ) ΠΈ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ°. ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ Π΄ΠΎΡΡΠ°Π²ΠΊΡ Π΄Π°Π½Π½ΡΡ Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠ΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ Π΄ΠΎΡΡΠ°Π²ΠΊΡ Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½ΠΎ ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠΊΠΎΠ½ΠΎΠΌΠ½Ρ Π² ΡΠΌΡΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ Π½ΠΈΡ Π½Π΅ ΡΡΠ΅Π±ΡΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ; ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΠΈΠΏΠ° Π΄ΠΎΠΌΠ΅Π½-Π³Π½Π΅Π·Π΄ΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ». Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π΄ΠΎΠΌΠ΅Π½Π° "Internet" ΡΡΠ»ΡΠ³ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ (TCP), Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ β ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» (UDP).
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π³Π½Π΅Π·Π΄Π°ΠΌΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ socket ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ Π»ΠΈΠ½ΠΈΠΈ ΡΠ²ΡΠ·ΠΈ.
sd = socket(format, type, protocol);
Format ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π΄ΠΎΠΌΠ΅Π½ ("UNIX system" ΠΈΠ»ΠΈ "Internet"), type β ΡΠΈΠΏ ΡΠ²ΡΠ·ΠΈ ΡΠ΅ΡΠ΅Π· Π³Π½Π΅Π·Π΄ΠΎ (Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» ΠΈΠ»ΠΈ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ°), Π° protocol β ΡΠΈΠΏ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ. ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³Π½Π΅Π·Π΄Π° sd, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ socket, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. ΠΠ°ΠΊΡΡΡΠΈΠ΅ Π³Π½Π΅Π·Π΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ close.
Π€ΡΠ½ΠΊΡΠΈΡ bind ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³Π½Π΅Π·Π΄Π° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ:
bind(sd, address, length);
Π³Π΄Π΅ sd β Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³Π½Π΅Π·Π΄Π°, address β Π°Π΄ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅ΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΠΉ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Π΄ΠΎΠΌΠ΅Π½Π° ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° (Π² ΡΡΠ½ΠΊΡΠΈΠΈ socket). Length β Π΄Π»ΠΈΠ½Π° ΡΡΡΡΠΊΡΡΡΡ address; Π±Π΅Π· ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ΄ΡΠΎ Π½Π΅ Π·Π½Π°Π»ΠΎ Π±Ρ, ΠΊΠ°ΠΊΠΎΠ²Π° Π΄Π»ΠΈΠ½Π° ΡΡΡΡΠΊΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π΄ΠΎΠΌΠ΅Π½Π° "UNIX system" ΡΡΡΡΠΊΡΡΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°. ΠΡΠΎΡΠ΅ΡΡΡ-ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ Π³Π½Π΅Π·Π΄Π° Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΠΎ ΡΠΎΡΡΠΎΡΠ²ΡΠ΅ΠΌΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ connect Π΄Π΅Π»Π°Π΅ΡΡΡ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌΡ Π³Π½Π΅Π·Π΄Ρ:
connect(sd, address, length);
Π‘Π΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΌΡΡΠ» ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌ (ΡΠΌ. ΡΡΠ½ΠΊΡΠΈΡ bind), Π½ΠΎ address ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΆΠ΅ Π½Π° Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π³Π½Π΅Π·Π΄ΠΎ, ΠΎΠ±ΡΠ°Π·ΡΡΡΠ΅Π΅ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡΠΉ ΠΊΠΎΠ½Π΅Ρ Π»ΠΈΠ½ΠΈΠΈ ΡΠ²ΡΠ·ΠΈ. ΠΠ±Π° Π³Π½Π΅Π·Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ Π΄ΠΎΠΌΠ΅Π½ ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΠ²ΡΠ·ΠΈ, ΠΈ ΡΠΎΠ³Π΄Π° ΡΠ΄ΡΠΎ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π»ΠΈΠ½ΠΈΠΈ ΡΠ²ΡΠ·ΠΈ. ΠΡΠ»ΠΈ ΡΠΈΠΏ Π³Π½Π΅Π·Π΄Π° β Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ°, ΡΠΎΠΎΠ±ΡΠ°Π΅ΠΌΡΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ connect ΡΠ΄ΡΡ Π°Π΄ΡΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ send ΡΠ΅ΡΠ΅Π· Π΄Π°Π½Π½ΠΎΠ΅ Π³Π½Π΅Π·Π΄ΠΎ; Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ.
ΠΠΎΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡ-ΡΠ΅ΡΠ²Π΅Ρ Π³ΠΎΡΠΎΠ²ΠΈΡΡΡ ΠΊ ΠΏΡΠΈΠ΅ΠΌΡ ΡΠ²ΡΠ·ΠΈ ΠΏΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ, ΡΠ΄ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΡΡΡΠΎΠΈΡΡ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅. ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ listen:
listen(sd, qlength)
Π³Π΄Π΅ sd β Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³Π½Π΅Π·Π΄Π°, Π° qlength β ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ-Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
Π ΠΈΡΡΠ½ΠΎΠΊ 11.19. ΠΡΠΈΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
Π‘ΠΈΡΡΠ΅ΠΌΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ accept ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ Π½Π° Π²Ρ ΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΡΠ°-ΡΠ΅ΡΠ²Π΅ΡΠ°:
nsd = accept(sd, address, addrlen);
Π³Π΄Π΅ sd β Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³Π½Π΅Π·Π΄Π°, address β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ², Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ΄ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, addrlen β ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΄ΡΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ addrlen ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π½ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³Π½Π΅Π·Π΄Π° (nsd), ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΎΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° sd. ΠΡΠΎΡΠ΅ΡΡ-ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π³Π½Π΅Π·Π΄Π°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΡΠ²ΡΠ·Ρ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ (Π ΠΈΡΡΠ½ΠΎΠΊ 11.19).
Π€ΡΠ½ΠΊΡΠΈΠΈ send ΠΈ recv Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π³Π½Π΅Π·Π΄ΠΎ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ send:
count = send(sd, msg, length, flags);
Π³Π΄Π΅ sd β Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³Π½Π΅Π·Π΄Π°, msg β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠΎΡΡΠ»Π°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, length ΡΠ°Π·ΠΌΠ΅Ρ Π΄Π°Π½Π½ΡΡ , count β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ Π±Π°ΠΉΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ flags ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ SOF_OOB (ΠΏΠΎΡΠ»Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ out-of-band β "ΡΠ΅ΡΠ΅Π· ΡΠ°ΠΌΠΎΠΆΠ½Ρ"), Π΅ΡΠ»ΠΈ ΠΏΠΎΡΡΠ»Π°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ»Π°ΡΡ out-of-band ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΈΠΌΠΈΡΠΈΡΡΡΡΠ΅Π΅ Π½Π°ΠΆΠ°ΡΠΈΠ΅ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° ΠΊΠ»Π°Π²ΠΈΡΠΈ "delete". Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ recv:
count = recv(sd, buf, length, flags);
Π³Π΄Π΅ buf β ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ ΠΏΡΠΈΠ΅ΠΌΠ° Π΄Π°Π½Π½ΡΡ , length β ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ , count ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π°ΠΉΡ, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. Π€Π»Π°Π³ΠΈ (flags) ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΎ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ out-of-band. Π Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ½ΡΡ Π²Π΅ΡΡΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, sendto ΠΈ recvfrom, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ°. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π³Π½Π΅Π·Π΄Π°ΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ send ΠΈ recv ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ read ΠΈ write. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π² ΡΠΈΠΏ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, ΡΠ΅ΡΠ²Π΅ΡΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ read ΠΈ write, ΡΠ»ΠΎΠ²Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ shutdown Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π³Π½Π΅Π·Π΄ΠΎΠ²ΡΡ ΡΠ²ΡΠ·Ρ:
shutdown(sd, mode)
Π³Π΄Π΅ mode ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΡΡΠΎΡΠΎΠ½ (ΠΏΠΎΡΡΠ»Π°ΡΡΠ΅ΠΉ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅ΠΉ ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΠΈΠΌ Π²ΠΌΠ΅ΡΡΠ΅) ΠΎΡΠ½ΡΠ½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΡΡΠ°ΡΡΠΈΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ . Π€ΡΠ½ΠΊΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΌΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅Π°Π½ΡΠ° ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΎΡΡΠ°Π²Π»ΡΡ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π³Π½Π΅Π·Π΄ Π² Π½Π΅ΠΏΡΠΈΠΊΠΎΡΠ½ΠΎΠ²Π΅Π½Π½ΠΎΡΡΠΈ. ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³Π½Π΅Π·Π΄Π° ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ close.
Π‘ΠΈΡΡΠ΅ΠΌΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ getsockname ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠΌΡ Π³Π½Π΅Π·Π΄ΠΎΠ²ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°Π½Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ bind:
getsockname(sd, name, length);
Π€ΡΠ½ΠΊΡΠΈΠΈ getsockopt ΠΈ setsockopt ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π³Π½Π΅Π·Π΄ΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠΈΠΏΠΎΠΌ Π΄ΠΎΠΌΠ΅Π½Π° ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π½Π° Π ΠΈΡΡΠ½ΠΊΠ΅ 11.20. ΠΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π² Π΄ΠΎΠΌΠ΅Π½Π΅ "UNIX system" Π³Π½Π΅Π·Π΄ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ Π΅ΠΌΡ ΠΈΠΌΡ sockname. ΠΠ°ΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ listen ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π΄Π»ΠΈΠ½Π° ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΠΈΠΊΠ» ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ². Π€ΡΠ½ΠΊΡΠΈΡ accept ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Π³Π½Π΅Π·Π΄Ρ Ρ ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ; ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΠΎΡΡ Π½ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³Π½Π΅Π·Π΄Π°. ΠΡΠΎΡΠ΅ΡΡ-ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ²ΡΠ·Ρ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ-ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ; ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈ ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΠΏΡΠΈ ΡΡΠΎΠΌ Π·Π°ΠΊΡΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π½Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΠΏΠΎΠΌΠ΅Ρ ΠΎΠΉ Π΄Π»Ρ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΈΠΊΠ° Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠΎΡΠ΅ΡΡ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ Π²Π΅Π΄Π΅Ρ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ read. ΠΡΠΎΡΠ΅ΡΡ-ΡΠ΅ΡΠ²Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ Π½Π°ΡΠ°Π»Ρ ΡΠΈΠΊΠ»Π° ΠΈ ΠΆΠ΄Π΅Ρ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
#include βΉsys/types.hβΊ
#include βΉsys/socket.hβΊ
main() {
int sd, ns;
char buf[256];
struct sockaddr sockaddr;
int fromlen;
sd = socket(AF_UNIX, SOCK_STREAM, 0);
/* ΠΈΠΌΡ Π³Π½Π΅Π·Π΄Π° β Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΡΡΡΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» */
bind(sd, "sockname", sizeof("sockname") - 1);
listen(sd, 1);
for (;;) {
ns = accept(sd, &sockaddr, &fromlen);
if (fork() == 0) { /* ΠΏΠΎΡΠΎΠΌΠΎΠΊ */
close(sd);
read(ns, buf, sizeof(buf));
printf("ΡΠ΅ΡΠ²Π΅Ρ ΡΠΈΡΠ°Π΅Ρ %s'\n",buf);
exit();
}
close(ns);
}
}
Π ΠΈΡΡΠ½ΠΎΠΊ 11.20. ΠΡΠΎΡΠ΅ΡΡ-ΡΠ΅ΡΠ²Π΅Ρ Π² Π΄ΠΎΠΌΠ΅Π½Π΅ "UNIX system"
#include βΉsys/types.hβΊ
#include βΉsys/socket.hβΊ
main() {
int sd, ns;
char buf[256];
struct sockaddr sockaddr;
int fromlen;
sd = socket(AF_UNIX, SOCK_STREAM, 0);
/* ΠΈΠΌΡ Π² Π·Π°ΠΏΡΠΎΡΠ΅ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΡΡΡΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» */
if (connect(sd, "sockname", sizeof("sockname") - 1) == -1) exit();
write(sd, "hi guy", 6);}
Π ΠΈΡΡΠ½ΠΎΠΊ 11.21. ΠΡΠΎΡΠ΅ΡΡ-ΠΊΠ»ΠΈΠ΅Π½Ρ Π² Π΄ΠΎΠΌΠ΅Π½Π΅ "UNIX system"
ΠΠ° Π ΠΈΡΡΠ½ΠΊΠ΅ 11.21 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π²Π΅Π΄ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. ΠΠ»ΠΈΠ΅Π½Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ Π³Π½Π΅Π·Π΄ΠΎ Π² ΡΠΎΠΌ ΠΆΠ΅ Π΄ΠΎΠΌΠ΅Π½Π΅, ΡΡΠΎ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ, ΠΈ ΠΏΠΎΡΡΠ»Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Π³Π½Π΅Π·Π΄Ρ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ sockname. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡ-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. Π ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΎΠ΄Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ.
ΠΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² ΡΠ΅ΡΠΈ, ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π³Π½Π΅Π·Π΄ΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π΄ΠΎΠΌΠ΅Π½Ρ "Internet", ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
socket(AF_INET, SOCK_STREAM, 0);