Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 113

Автор АндрСй РобачСвский

Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΠΈΠ· (Ρ‚.Π΅. ΠΎΡ‚ Π²Π΅Ρ€Ρ…Π½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΊ Π½ΠΈΠΆΠ½ΠΈΠΌ) ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ инициируСтся систСмными Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ синхронный Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· сСти ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² случайныС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ сСтСвым Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. ΠŸΡ€ΠΈ этом Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ модуля ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ нСпосрСдствСнно сСтСвым Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ. ВмСсто этого послСдний устанавливаСт Π±ΠΈΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ прСрывания, Π² контСкстС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ систСма ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΈ запускаСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня (транспортному), Π΅Π³ΠΎ функция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° нСпосрСдствСнно ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ сСтСвого уровня. Если ΠΆΠ΅ сообщСниС ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ хосту, ΠΈ систСма выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ шлюза, сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΡƒΡ€ΠΎΠ²Π½ΡŽ сСтСвого интСрфСйса для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со взаимодСйствиСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ сСтСвой подсистСмы BSD UNIX, рассмотрим сначала структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ сокСт, ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈ сСтСвой интСрфСйс.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… socket, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ сокСт, прСдставлСна Π½Π° рис. 6.21. Π’ этой структурС хранится информация ΠΎ Ρ‚ΠΈΠΏΠ΅ сокСта (so_type), Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ состоянии (so_state) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ (so_proto).

Рис. 6.21. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… сокСта

Π‘ΠΎΠΊΠ΅Ρ‚ являСтся ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΡƒΠ·Π»ΠΎΠΌ ΠΈ обСспСчиваСт Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΈ отправляСмых Π΄Π°Π½Π½Ρ‹Ρ…. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² распоряТСниС сокСта Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ систСмного Π²Ρ‹Π·ΠΎΠ²Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, write(2) ΠΈΠ»ΠΈ send(2)), сокСт Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ отправлСния. Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ связанного списка ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² mbuf, структура ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° рис. 6.21. ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ подтвСрТдСния получСния ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях сообщСния ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² Π±ΡƒΡ„Π΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сокСта Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ»ΠΈ получСния подтвСрТдСния. Аналогично, Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· сСти, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сокСта-адрСсата, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Ρ‹ ΠΎΡ‚Ρ‚ΡƒΠ΄Π° систСмным Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, read(2) ΠΈΠ»ΠΈ recv(2)).

Для избСТания пСрСполнСния Π±ΡƒΡ„Π΅Ρ€ (структура sockbuf) Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ sb_hiwat β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π²Π°Ρ‚Π΅Ρ€Π»ΠΈΠ½ΠΈΠΈ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ TCP устанавливаСт максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ° Ρ€Π°Π²Π½Ρ‹ΠΌ этому ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ.

Π‘ΠΎΠΊΠ΅Ρ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов Π½Π° установлСниС связи (зарСгистрированныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмного Π²Ρ‹Π·ΠΎΠ²Π° listen(2)), Π°Π΄Ρ€Π΅ΡΡƒΡŽΡ‚ Π΄Π²Π° связанных списка: список сокСтов, связь для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ установлСна, ΠΈ список сокСтов, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… доступ ΠΊ созданным ΠΊΠ°Π½Π°Π»Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ структура Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ рассмотрим, относится ΠΊ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° прСдставляСт собой Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ описываСтся структурой Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. ΠšΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСса стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π° (pr_input()) ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° (pr_output()), ΠΈ выполняСт Ρ‚Ρƒ ΠΆΠ΅ Ρ€ΠΎΠ»ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ элСмСнт ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€Π° устройств, рассмотрСнный Π² Π³Π»Π°Π²Π΅ 5. ПолС so_proto сокСта содСрТит адрСс этой структуры для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. Π’ΠΈΠ΄ ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 6.22.

Рис. 6.22. ΠšΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ использованиСм модуля вызываСтся функция Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ pr_init(). ПослС этого систСма Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° модуля ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° pr_fasttimo() ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 200 миллисСкунд ΠΈ pr_slowtimo() ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 500 миллисСкунд, Ссли ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° TCP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ΠΎΠ² ΠΏΡ€ΠΈ установлСнии связи ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π°Ρ…. Ѐункция pr_drain() вызываСтся систСмой ΠΏΡ€ΠΈ нСдостаткС свободной памяти ΠΈ позволяСт ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ Π½Π΅ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ сообщСния для освобоТдСния мСста.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pr_usrreq() ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ сообщСния ΠΎΡ‚ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ процСсса. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, эта функция опрСдСляСт интСрфСйс взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ сокСтом ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня. Одним ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся Π½ΠΎΠΌΠ΅Ρ€ запроса, зависящий ΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ систСмного Π²Ρ‹Π·ΠΎΠ²Π°. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ взаимодСйствия сокСта с ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ процСссами являСтся стандартным интСрфСйсом систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ bind(2), listen(2), send(2), sendto(2) ΠΈ Ρ‚.Π΄. Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ запросы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pr_usrreq(). НСкоторыС ΠΈΠ· Π½ΠΈΡ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π». 6.7.


Π’Π°Π±Π»ΠΈΡ†Π° 6.7. Запросы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pr_usrreq()

БистСмный Π²Ρ‹Π·ΠΎΠ² Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Запрос close(2) ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ PRU_ABORT accept(2) ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ запрос Π½Π° установлСниС связи PRU_ACCEPT bind(2) Π‘Π²ΡΠ·Π°Ρ‚ΡŒ сокСт с адрСсом PRU_BIND connect(2) Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ связь PRU_CONNECT listen(2) Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ обслуТиваниС запросов PRU_LISTEN send(2), sendto(2) ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ PRU_SEND fstat(2) ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ состояниС сокСта PRU_SENSE getsockname(2) ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс локального сокСта PRU_SOCKADDR getpeername(2) ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ сокСта PRU_PEERADDR ioctl(2) ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° PRU_CONTROL

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ pr_input() ΠΈ pr_output() ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ интСрфСйс взаимодСйствия ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈ слуТат для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ модулями сосСдних ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. Аналогично для ΠΎΠ±ΠΌΠ΅Π½Π° ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ модулями ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pr_ctlinput() ΠΈ pr_ctloutput(). Π¦Π΅ΠΏΠΎΡ‡ΠΊΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ освобоТдСниС памяти ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ сообщСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ посрСдством рассмотрСнных структур mbuf: ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ сообщСний ΠΎΡ‚ сСти ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌΡƒ процСссу Π·Π° освобоТдСниС Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² mbuf ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ сообщСний Π² ΡΠ΅Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, занимаСмая сообщСниСм, освобоТдаСтся Π½Π° самом Π½ΠΈΠΆΠ½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

ПолС pr_flags опрСдСляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ характСристики ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΈ Ρ€Π΅ΠΆΠΈΠΌ Π΅Π³ΠΎ функционирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² основном относятся ΠΊ ΡƒΡ€ΠΎΠ²Π½ΡŽ сокСтов. НапримСр, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ установлСниС связи, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° PR_CONNREQUIRED, Π½Π΅ позволяя Ρ‚Π΅ΠΌ самым функциям сокСта ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Π΄ΠΎ создания Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°. Если установлСн Ρ„Π»Π°Π³ PR_WANTRCVD, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сокСта Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ процСсс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ сигналом ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ для отправлСния подтвСрТдСния ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ для обновлСния значСния ΠΎΠΊΠ½Π° Π² соотвСтствии с освободившимся мСстом.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΈΠΌΠ΅Π΅Ρ‚ собствСнныС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ сСтСвой интСрфСйс систСмы прСдставлСн структурой Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½Π° рис. 6.23. Π‘Π΅Ρ‚Π΅Π²ΠΎΠΉ интСрфСйс ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ связан с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ сСтСвым Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ, хотя это Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ условиСм. НапримСр, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ сСтСвой интСрфСйс loopback прСдставляСт собой псСвдоустройство, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ для ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ взаимодСйствия сСтСвых процСссов Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ хоста, ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ Ρ‚.ΠΏ.

Рис. 6.23. Π‘Π΅Ρ‚Π΅Π²ΠΎΠΉ интСрфСйс

РСшСниС ΠΎΠ± использовании Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ сСтСвого интСрфСйса для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСния базируСтся Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ производится ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ сСтСвого уровня. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π΄ΠΎΠΌΠ΅Π½ΠΎΠ². БоотвСтствСнно, ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько адрСсов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСмСйства ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ². Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ (broadcast) адрСса интСрфСйса, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ маску, хранятся Π² Π²ΠΈΠ΄Π΅ связанного списка.