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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 6

Автор Уильям БтивСнс

Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ сСтСвых Π°Ρ‚Π°ΠΊ Π±Ρ‹Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ…Π°ΠΊΠ΅Ρ€Π°ΠΌΠΈ с использованиСм нСзащищСнности sprintf ΠΎΡ‚ пСрСполнСния Π±ΡƒΡ„Π΅Ρ€Π°. Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ: gets, strcat ΠΈ strcpy. ВмСсто Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ fgets, strncat ΠΈ strncpy. Π•Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ соврСмСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ strlcat ΠΈ strlcpy, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΡƒΡŽ строку. ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ совСты, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ написания Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… сСтСвых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π³Π»Π°Π²Π΅ 23 ΠΊΠ½ΠΈΠ³ΠΈ [32].

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ соСдинСния

22 Π‘Π΅Ρ€Π²Π΅Ρ€ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ соСдинСниС с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ close. Π­Ρ‚ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прСрывания соСдинСния TCP: ΠΏΠ°ΠΊΠ΅Ρ‚ FIN посылаСтся Π² ΠΎΠ±ΠΎΠΈΡ… направлСниях, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ FIN распознаСтся Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠ½Ρ†Π΅ соСдинСния. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ трСхэтапноС Ρ€ΡƒΠΊΠΎΠΏΠΎΠΆΠ°Ρ‚ΠΈΠ΅ ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° TCP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для прСрывания соСдинСния, Π±ΡƒΠ΄ΡƒΡ‚ описаны Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 2.6.

Π‘Π΅Ρ€Π²Π΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹ Π±Ρ‹Π» рассмотрСн Π½Π°ΠΌΠΈ достаточно ΠΊΡ€Π°Ρ‚ΠΊΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°. Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹.

β–  Π‘Π΅Ρ€Π²Π΅Ρ€, ΠΊΠ°ΠΊ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, зависим ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° IPv4. Π’ листингС 11.7 ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ, Π½Π΅ Π·Π°Π²ΠΈΡΡΡ‰ΡƒΡŽ ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getaddrinfo.

β–  ΠΠ°Ρˆ сСрвСр ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ запрос ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Если ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΎΠ΄Π½ΠΎ врСмя происходит мноТСство клиСнтских соСдинСний, ядро ставит ΠΈΡ… Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, максимальная Π΄Π»ΠΈΠ½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π°, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ эти соСдинСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ accept ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Наш сСрвСр Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Π΄Π²ΡƒΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, time ΠΈ ctime, являСтся достаточно быстрым. Но Ссли Ρƒ сСрвСра обслуТиваниС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (допустим, нСсколько сСкунд ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ), Π½Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ обслуТиваниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

Π‘Π΅Ρ€Π²Π΅Ρ€, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² листингС 1.5, называСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ сСрвСром (iterative server), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ обслуТиваСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. БущСствуСт нСсколько Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ написания ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сСрвСра (concurrent server), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обслуТиваСт мноТСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π‘Π°ΠΌΠΎΠΉ простой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ являСтся Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Unix fork (Ρ€Π°Π·Π΄Π΅Π» 4.7), ΠΊΠΎΠ³Π΄Π° создаСтся ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ процСссу для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π”Ρ€ΡƒΠ³ΠΎΠΉ способ β€” использованиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (threads) вмСсто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fork (Ρ€Π°Π·Π΄Π΅Π» 26.4) ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ фиксированного количСства Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… процСссов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fork Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ (Ρ€Π°Π·Π΄Π΅Π» 30.6).

β–  Π—апуская Ρ‚Π°ΠΊΠΎΠΉ сСрвСр ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ рассчитываСм, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ достаточно Π΄ΠΎΠ»Π³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ часто сСрвСры Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, ΠΏΠΎΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ систСма. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ сСрвСра Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½ (daemon) Unix, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ процСсс, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π±Π΅Π· ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 13.4.

1.6. Π’Π°Π±Π»ΠΈΡ†Π° соотвСтствия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр

Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ сСтСвого программирования ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² этой ΠΊΠ½ΠΈΠ³Π΅ Π½Π° Π΄Π²ΡƒΡ… основных ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…:

β–  ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹ (описаниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ Π² листингах 1.1, 1.2 ΠΈ 1.5), ΠΈ

β–  ΡΡ…ΠΎ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ появится Π² Π³Π»Π°Π²Π΅ 5).

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ поиск Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ касаСмся Π² этой ΠΊΠ½ΠΈΠ³Π΅, ΠΌΡ‹ объСдинили Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ сопроводили ΠΈΡ… Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ листингов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ исходный ΠΊΠΎΠ΄. Π’ Ρ‚Π°Π±Π». 1.1 пСрСчислСны вСрсии ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹ (Π΄Π²Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ). Π’ Ρ‚Π°Π±Π». 1.2 ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ вСрсии сСрвСра Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹. Π’ Ρ‚Π°Π±Π». 1.3 прСдставлСны вСрсии эхо-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π° Π² Ρ‚Π°Π±Π». 1.4 β€” вСрсии эхо-сСрвСра.


Π’Π°Π±Π»ΠΈΡ†Π° 1.1. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ вСрсии ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹

Листинг ОписаниС 1.1 TCP/Ipv4, зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° 1.2 TCP/Ipv6, зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° 11.2 TCP/Ipv4, зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gethostbyname ΠΈ getservbyname 11.5 TCP, нСзависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getaddrinfo ΠΈ tcp_connect 11.10 UDP, нСзависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getaddrinfo ΠΈ udp_connect 16.7 TCP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ connect 31.2 TCP/IPv4, зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π”.1 TCP, зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ SIGPIPE Π”.2 TCP, зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° сокСта ΠΈ MSS Π”.5 TCP, зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, допускаСт использованиС ΠΈΠΌΠ΅Π½ΠΈ ΡƒΠ·Π»Π° (функция gethostbyname) ΠΈΠ»ΠΈ IP-адрСса Π”.6 TCP, нСзависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, допускаСт использованиС ΠΈΠΌΠ΅Π½ΠΈ ΡƒΠ·Π»Π° (функция gethostbyname).

Π’Π°Π±Π»ΠΈΡ†Π° 1.2. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ вСрсии сСрвСра Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹, рассматриваСмыС Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅

Листинг ОписаниС 1.5 TCP/IPv4, зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° 11.7 TCP, нСзависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ getaddrinfo ΠΈ tcp_listen 11.8 TCP, нСзависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ getaddrinfo ΠΈ tcp_listen 11.13 UDP, нСзависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ getaddrinfo ΠΈ udp_server 13.2 TCP, нСзависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, выполняСтся ΠΊΠ°ΠΊ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ Π΄Π΅ΠΌΠΎΠ½ 13.4 TCP, нСзависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ inetd

Π’Π°Π±Π»ΠΈΡ†Π° 1.3. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ вСрсии эхо-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, рассматриваСмыС Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅

Листинг ОписаниС 5.3 TCP/IPv4, зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° 6.1 TCP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ select 6.2 TCP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ select ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ 8.3 UDP/IPv4, зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° 8.5 UDP, провСряСт адрСс сСрвСра 8.7 UDP, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ connect для получСния асинхронных ошибок 14.2 UDP, Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра с использованиСм сигнала SIGALRM 14.4 UDP, Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ select 14.5 UDP, Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра с использованиСм ΠΎΠΏΡ†ΠΈΠΈ сокСта SO_RCVTIMEO 14.7 TCP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ интСрфСйс /dev/poll 14.8 TCP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ интСрфСйс kqueue 15.4 ΠŸΠΎΡ‚ΠΎΠΊ Π΄ΠΎΠΌΠ΅Π½Π° Unix, зависит ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° 15.6 Π”Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠΌΠ΅Π½Π° Unix, зависит ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° 16.1 TCP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ 16.6 TCP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° процСсса (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fork) 16.14 TCP, устанавливаСт соСдинСниС, Π·Π°Ρ‚Π΅ΠΌ посылаСт ΠΏΠ°ΠΊΠ΅Ρ‚ RST 20.1 UDP, ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, ситуация Π³ΠΎΠ½ΠΎΠΊ 20.2 UDP, ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, ситуация Π³ΠΎΠ½ΠΎΠΊ 20.3 UDP, ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, для устранСния ситуации Π³ΠΎΠ½ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция pselect 20.5 UDP, ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, для устранСния ситуации Π³ΠΎΠ½ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sigsetjmp ΠΈ siglongmp 20.6 UDP, ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, для устранСния ситуации Π³ΠΎΠ½ΠΎΠΊ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ сигнала ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ IPC 22.4 UDP, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ надСТности ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π·Π° счСт примСнСния ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ΠΎΠ² ΠΈ порядковых Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² 26.1 TCP, использованиС Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² 27.4 TCP/IPv4, Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° ΠΎΡ‚ отправитСля 27.5 UDP/IPv6, Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° ΠΎΡ‚ отправитСля

Π’Π°Π±Π»ΠΈΡ†Π° 1.4. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ вСрсии эхо-сСрвСра, рассматриваСмыС Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅