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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 168

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-Π΄Π΅ΠΌΠΎΠ½ (xinetd/inetd)

БистСмы UNIX, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ряд сСтСвых сСрвисов, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π΄Π΅Π»Π°ΡŽΡ‚ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ супСрсСрвСра. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-Π΄Π΅ΠΌΠΎΠ½ xinetd ΠΈΠ»ΠΈ inetd) ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ запросы Π½Π° соСдинСния с мноТСством адрСсов ΠΏΠΎΡ€Ρ‚ΠΎΠ². Когда ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ сСрвису, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-Π΄Π΅ΠΌΠΎΠ½ запускаСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ сСрвСр. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ сСрвСрам Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ постоянно, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’ соврСмСнных систСмах Linux Ρ€ΠΎΠ»ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-Π΄Π΅ΠΌΠΎΠ½Π° исполняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° xinetd. Она Π·Π°ΠΌΠ΅Π½ΠΈΠ»Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ UNIX-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ inetd, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… систСмах Linux ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСмах.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° xinetd ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ настраиваСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ графичСского интСрфСйса для управлСния сСтСвыми сСрвисами, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ нСпосрСдствСнно Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. К Π½ΠΈΠΌ относятся Ρ„Π°ΠΉΠ» /etc/xinetd.conf ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /etc/xinetd.d.

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСрвиса, прСдоставляСмого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ xinetd, Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /etc/xinetd.d. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° xinetd считаСт всС эти Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π²ΠΎ врСмя запуска ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΠ°Ρ€Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ xinetd, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… для сСрвиса daytime.

# По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½

# ОписаниС: сСрвСр daytime. Π­Ρ‚ΠΎ вСрсия tcp.

service daytime

{

 socket_type = stream

 protocol    = tcp

 wait        = no

 user        = root

 type        = INTERNAL

 id          = daytime-stream

 FLAGS       = IPv6 IPv4

}

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для сСрвиса ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ².

# По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½

# ОписаниС:

# FTP-сСрвСр vsftpd обслуТиваСт FTP-соСдинСния. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚

# для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅, Π½Π΅Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ

# ΠΏΠ°Ρ€ΠΎΠ»ΠΈ, vsftpd спроСктирован для бСзопасной Ρ€Π°Π±ΠΎΡ‚Ρ‹.

#

# ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: этот Ρ„Π°ΠΉΠ» содСрТит ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ запуска vsftpd для xinetd.

# Π€Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ vsftpd находится Π²

# /etc/vsftpd.conf

service ftp {

# server_args =

# log_on_success += DURATION USERID

# log_on_failure += USERID

# nice = 10

 socket_type = stream

 protocol    = tcp

 wait        = no

 user        = root

 server      = /usr/sbin/vsftpd

}

БСрвис daytime, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° getdate, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ обрабатываСтся самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ xinetd (ΠΎΠ½ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ) ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°ΠΊ сокСтов Ρ‚ΠΈΠΏΠ° SOCK_STREAM (tcp), Ρ‚Π°ΠΊ ΠΈ сокСтов Ρ‚ΠΈΠΏΠ° SOCK_DGRAM (udp).

БСрвис ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ftp ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сокСтами Ρ‚ΠΈΠΏΠ° SOCK_STREAM ΠΈ прСдоставляСтся внСшнСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС vsftpd. Π”Π΅ΠΌΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ эту внСшнюю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ ΠΊ ΠΏΠΎΡ€Ρ‚Ρƒ ftp.

Для Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ сСрвиса ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ xinetd ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сигнал отбоя (hang-up) процСссу-Π΄Π΅ΠΌΠΎΠ½Ρƒ, Π½ΠΎ ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½Ρ‹ΠΉ способ настройки сСрвисов. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ сСрвису daytime, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ этот сСрвис с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСдств, прСдоставляСмых систСмой Linux. Π’ систСмах SUSE ΠΈ openSUSE сСрвисы ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ· SUSE Control Center (Π¦Π΅Π½Ρ‚Ρ€ управлСния SUSE), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 15.1. Π£ вСрсий Red Hat (ΠΈ Enterprise Linux, ΠΈ Fedora) Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ интСрфСйс настройки. Π’ Π½Π΅ΠΌ сСрвис daytime Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ для TCP- ΠΈ UDP-запросов.

Рис. 15.1 


Для систСм, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ inetd вмСсто xinetd, Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ эквивалСнтноС ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ inetd, /etc/inetd.conf, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° inetd ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ запускС сСрвСров:

#

# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>

#

# Echo, discard, daytime ΠΈ chargen ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² основном для

# тСстирования.

#

daytime stream tcp nowait root internal

daytime dgram udp wait root internal

#

# Π­Ρ‚ΠΎ стандартныС сСрвисы.

#

ftp stream tcp-nowait root /usr/sbin/tcpd /usr/sbin/wu.ftpd

telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd

#

# ΠšΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° inetd.conf.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ сСрвис ftp прСдоставляСтся внСшнСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ wu.ftpd. Если Π² вашСй систСмС выполняСтся Π΄Π΅ΠΌΠΎΠ½ inetd, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ прСдоставляСмых сСрвисов, ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π² Ρ„Π°ΠΉΠ» /etc/inetd.conf (Π·Π½Π°ΠΊ # Π² Π½Π°Ρ‡Π°Π»Π΅ строки ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это строка коммСнтария) ΠΈ пСрСзапустив процСсс inetd. Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ² сигнал отбоя (hang-up) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ kill. Для облСгчСния этого процСсса Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ систСмы настроСны Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° inetd записываСт свой ID Π² Ρ„Π°ΠΉΠ». Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ killall:

# killall -HUP inetd

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сокСта

БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для управлСния ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ соСдинСний Π½Π° Π±Π°Π·Π΅ сокСтов β€” слишком ΠΌΠ½ΠΎΠ³ΠΎ для ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ описания Π² этой Π³Π»Π°Π²Π΅. Для манипулирования ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ setsockopt:

#include <sys/socket.h>

int setsockopt(int socket, int level, int option_name,

 const void *option value, size_t option len);

Π—Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ². Для установки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ сокСта Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ level Ρ€Π°Π²Π½Ρ‹ΠΌ SOL_SOCKET. Для задания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² (TCP, UDP ΠΈ Ρ‚.Π΄.) приравняйтС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ level Π½ΠΎΠΌΠ΅Ρ€Ρƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° (ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ Π»ΠΈΠ±ΠΎ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° netinet/in.h, Π»ΠΈΠ±ΠΎ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getprotobyname).

Π’ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ option_name указываСтся имя Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ option_value содСрТит ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½ΠΎΠΉ option_len Π±Π°ΠΉΡ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ уровня сокСта ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ sys/socket.h ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² Ρ‚Π°Π±Π». 15.4 значСния.


Π’Π°Π±Π»ΠΈΡ†Π° 15.5

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ОписаниС SO_DEBUG Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ SO_KEEPALIVE БохраняСт Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ соСдинСния ΠΏΡ€ΠΈ пСриодичСских ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π°Ρ… SO_LINGER Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ SO_DEBUG ΠΈ SO_KEEPALIVE ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Ρ†Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ option_value для установки ΠΈΠ»ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (1) ΠΈ сброса ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (0). Для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° SO_LINGER Π½ΡƒΠΆΠ½Π° структура Ρ‚ΠΈΠΏΠ° linger, опрСдСлСнная Π² Ρ„Π°ΠΉΠ»Π΅ sys/socket.h ΠΈ Π·Π°Π΄Π°ΡŽΡ‰Π°Ρ состояниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ.

Ѐункция setsockopt Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0 Π² случаС успСха ΠΈ -1 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. На страницах ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ справочного руководства описаны Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ ошибки.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ случай мноТСствСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΊ сСрвСру. Π’Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° сСрвСрная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° запрос Π½Π° соСдинСниС, создаСтся Π½ΠΎΠ²Ρ‹ΠΉ сокСт, Π° исходный сокСт, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ запросы Π½Π° соСдинСниС, остаСтся доступСн для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… запросов. Если сСрвСр Π½Π΅ смоТСт Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΠ΅ ΠΏΠΎΠ·ΠΆΠ΅ запросы Π½Π° соСдинСния, ΠΎΠ½ΠΈ сохранятся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ оТидания.

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ исходный сокСт всС Π΅Ρ‰Π΅ доступСн, ΠΈ Ρ‡Ρ‚ΠΎ сокСты Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы, Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ обслуТивания ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Если сСрвСр Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fork для создания своСй Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ сокСт Π±ΡƒΠ΄Π΅Ρ‚ унаслСдован Π½ΠΎΠ²Ρ‹ΠΌ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ процСссом. Π”Π°Π»Π΅Π΅ ΠΎΠ½ смоТСт ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ²ΡˆΠΈΠΌΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ основной сСрвСр ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… запросов Π½Π° соСдинСниС. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ сСрвСра Π½ΡƒΠΆΠ½ΠΎ внСсти ΠΎΡ‡Π΅Π½ΡŒ простоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ 15.7.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ создаСтС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ процСссы, Π½ΠΎ Π½Π΅ ΠΆΠ΄Π΅Ρ‚Π΅ ΠΈΡ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, слСдуСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сСрвСр ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π» сигналы SIGCHLD, прСпятствуя возникновСнию процСссов-Π·ΠΎΠΌΠ±ΠΈ.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 15.7. Π‘Π΅Ρ€Π²Π΅Ρ€ для многочислСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

1. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° server4.c начинаСтся Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ послСдний рассмотрСнный сСрвСр с Π²Π°ΠΆΠ½Ρ‹ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ include для Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° signal.h. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ создания ΠΈ имСнования сокСта ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌΠΈ: