ΠΠΈΡΡΠΈΠ½Π³ 1.1. ΠΠ»ΠΈΠ΅Π½Ρ TCP Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°ΡΡ
//intro/daytimetcpcli.Ρ
1 #include "unp.h"
2 int
3 main(int argc, char **argv)
4 {
5 int sockfd, n;
6 char recvline[MAXLINE + 1];
7 struct sockaddr_in servaddr;
8 if (argc != 2)
9 err_quit("usage: a.out <Ipaddress>");
10 if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
11 err_sys("socket error");
12 bzero(&servaddr, sizeof(servaddr));
13 servaddr.sin_family = AF_INET;
14 servaddr.sin_port = htons(13); /* ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°ΡΡ */
15 if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
16 err_quit("inet_pton error for %s", argv[1]);
17 if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) < 0)
18 err_sys("connect error");
19 while ((n = read(sockfd, recvline, MAXLINE)) > 0) {
20 recvline[n] = 0; /* Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ Π½ΡΠ»Ρ */
21 if (fputs(recvline, stdout) == EOF)
22 err_sys("fputs error");
23 }
24 if (n < 0)
25 err_sys("read error");
26 exit(0);
27 }
ΠΠ ΠΠΠΠ§ΠΠΠΠΠΡΠΎ ΡΠΎΡΠΌΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΡΠ΅ΠΊΡΡΠ΅. ΠΠ°ΠΆΠ΄Π°Ρ Π½Π΅ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° ΠΏΡΠΎΠ½ΡΠΌΠ΅ΡΠΎΠ²Π°Π½Π°. ΠΠ±Π·Π°Ρ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π°, Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π΄Π²ΡΡ Π½ΠΎΠΌΠ΅ΡΠΎΠ² β Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΡΠ΅Ρ ΡΡΡΠΎΠΊ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ΄Π΅Ρ ΡΠ΅ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ Π°Π±Π·Π°ΡΠ΅. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π°Π±Π·Π°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ΅Π·ΡΠΌΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π Π½Π°ΡΠ°Π»Π΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π° ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎ ΡΠ°ΠΉΠ» daytimetcpcli.c Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ intro. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π²ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ ΠΈΠ· Π‘Π΅ΡΠΈ (ΡΠΌ. ΠΏΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅), Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΠΎ ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌ. ΠΠ°ΠΈΠ»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΠ·ΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ, Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Ρ ΠΎΠ΄Π΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΊΠ½ΠΈΠ³ΠΈ.
ΠΠ ΠΠΠΠ§ΠΠΠΠΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΡΠ°Π²ΠΎΠΊ.
ΠΡΠ»ΠΈ ΠΌΡ ΠΎΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΠ» a.out ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π΅, Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
solaris % a.out 206.168.112.96 Π½Π°Ρ Π²Π²ΠΎΠ΄
Mon May 26 20:58:40 2003 Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ ΠΠΠΠ§ΠΠΠΠΠΡΠΎΠ±ΡΠ°ΠΆΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ Π²Π²ΠΎΠ΄ ΠΈ Π²ΡΠ²ΠΎΠ΄, ΠΌΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΠΎ, ΡΡΠΎ ΠΌΡ Π²Π²ΠΎΠ΄ΠΈΠΌ, ΠΏΠΎΠ»ΡΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ; Π²ΡΠ²ΠΎΠ΄ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ. ΠΡ Π²ΡΠ΅Π³Π΄Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ solaris), ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡΠ·Π»Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π‘ΠΈΡΡΠ΅ΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ, ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π½Π° ΡΠΈΡ. 1.7. ΠΠΌΠ΅Π½Π° ΡΠ·Π»ΠΎΠ² ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ.
Π ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΡΠΎΡΡΠΎΡΡΠ΅ΠΉ ΠΈΠ· 27 ΡΡΡΠΎΠΊ, Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ, Π½ΡΠΆΠ΄Π°ΡΡΠΈΡ ΡΡ Π² ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ. ΠΡ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΡ Π½Π° ΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΠ΅ΡΠ²Π°Ρ ΡΠ΅ΡΠ΅Π²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈΡΡ, Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π² Π΄ΡΡΠ³ΠΈΡ Π³Π»Π°Π²Π°Ρ .
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°1 ΠΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π½Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», unp.h, ΡΠ΅ΠΊΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π.1. ΠΡΠΎΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Ρ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π½Π°ΠΌΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, MAXLINE).
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ2-3 ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ main Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΠ΅Π·Π΄Π΅ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π»ΠΎΡΡ, ΡΡΠΎ Π΄Π»Ρ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ANSI Π‘ (American National Standards Institute β ΠΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΠΈΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ Π‘Π¨Π), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ ISO Π‘.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ° TCP10-11 Π€ΡΠ½ΠΊΡΠΈΡ socket ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Ρ (SOCK_STREAM) ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° (AF_INET) β ΡΡΠΎ ΠΊΡΠ°ΡΠΈΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ TCP-ΡΠΎΠΊΠ΅ΡΠ°). Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ (Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ), ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΊΠ΅ΡΠ° Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π°Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, connect ΠΈ read).
ΠΠ ΠΠΠΠ§ΠΠΠΠΠΠΏΠ΅ΡΠ°ΡΠΎΡ if ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ socket, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ sockfd ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΡΠΎ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Π½ΡΡΠΈΠΌ Π½ΡΠ»Ρ. ΠΡ ΠΌΠΎΠ³Π»ΠΈ ΡΠ°Π·Π±ΠΈΡΡ ΡΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π° Π΄Π²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π‘ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.1 Π·Π°ΠΏΠΈΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΠΌ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° Π‘ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄Π²ΡΡ ΡΡΡΠΎΠΊ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΠ·ΡΠΊΠ΅ Π‘ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Β«ΠΌΠ΅Π½ΡΡΠ΅Β» (<) ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΠ»ΡΡΠΈΡΡ Π² ΡΠΊΠΎΠ±ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΊΠ°ΠΊ ΡΡΠΎ ΠΈ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.1, Π² ΡΡΡΠΎΠΊΠ΅ 10). ΠΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΎΡΠΊΡΡΠ²Π°ΡΡΠΈΠΌΠΈ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ ΠΌΡ Π²ΡΠ΅Π³Π΄Π° Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π΅Π» ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π»Π΅Π²Π°Ρ ΡΠ°ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ. (ΠΡΠΎΡ ΡΡΠΈΠ»Ρ ΠΏΠΎΠ·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Minix [120].) ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠΎΡ ΠΆΠ΅ ΠΏΡΠΈΠ΅ΠΌ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ while Π΄Π°Π»ΡΡΠ΅ Π² Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
ΠΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΡΡΠ΅ΡΠ°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π° ΡΠΎΠΊΠ΅Ρ (socket). ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π½Π°ΠΌΠΈ API Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ API ΡΠΎΠΊΠ΅ΡΠΎΠ². ΠΠΎ-Π²ΡΠΎΡΡΡ , Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ Π°Π±Π·Π°ΡΠ΅ ΠΌΡ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ socket, ΠΊΠΎΡΠΎΡΠ°Ρ Π²Ρ ΠΎΠ΄ΠΈΡ Π² API ΡΠΎΠΊΠ΅ΡΠΎΠ². Π-ΡΡΠ΅ΡΡΠΈΡ , ΡΠ°ΠΌ ΠΆΠ΅ ΠΌΡ ΡΡΡΠ»Π°Π»ΠΈΡΡ ΠΈ Π½Π° Β«ΡΠΎΠΊΠ΅Ρ TCPΒ», ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠΎΠΌ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ TCP (TCP endpoint).
ΠΡΠ»ΠΈ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ socket ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌ, ΠΌΡ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ err_sys. ΠΠ½Π° Π²ΡΠ΄Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Ρ Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«ΠΡΠΎΡΠΎΠΊΠΎΠ» Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡΒ» β ΠΎΠ΄Π½Π° ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ socket) ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½Π° Π½Π°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ err_. ΠΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ . ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π.4.
ΠΠ°Π΄Π°Π½ΠΈΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΡΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°12-16 ΠΡ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° (ΡΡΡΡΠΊΡΡΡΠ° ΡΠΈΠΏΠ° sockaddr_in Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ servaddr) IP-Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΠΏΠΎΡΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π½ΡΠ»ΡΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ bzero, Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ° Π² 13 (ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° (well-known port) ΡΠ΅ΡΠ²Π΅ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°ΡΡ Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠ·Π»Π΅ TCP/IP, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠ»ΡΠΆΠ±Ρ β ΡΠΌ. ΡΠ°Π±Π». 2.1), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ IP-Π°Π΄ΡΠ΅Ρ ΡΠ°Π²Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (argv[1]). Π ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ ΠΏΠΎΠ»Ρ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈ Π½ΠΎΠΌΠ΅ΡΠ° ΠΏΠΎΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ: ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ htons (host to network short), ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ° Π² ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΠΎΡΠΌΠ°Ρ, ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ inet_pton (presentation to numeric), ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² ΡΠΈΠΌΠ²ΠΎΠ»Π°Ρ ASCII (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 206.168.112.96 ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°) Π² Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ.
ΠΠ ΠΠΠΠ§ΠΠΠΠΠ€ΡΠ½ΠΊΡΠΈΡ bzero Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ANSI Π‘. ΠΠ½Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΠ΅ΡΠΊΠ»ΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π΅, Π° Π½Π΅ ΡΡΠ½ΠΊΡΠΈΡ ANSI Π‘ memset, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ bzero ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅: ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ Π΄Π²ΡΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, a memset β Ρ ΡΡΠ΅ΠΌΡ. ΠΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ API ΡΠΎΠΊΠ΅ΡΠΎΠ², ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ bzero, Π° Π΅ΡΠ»ΠΈ ΠΈ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ, ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π΅Π΅ ΡΠ΅ΡΠ΅Π· ΠΌΠ°ΠΊΡΠΎΡ Π² Π½Π°ΡΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ unp.h.
ΠΠ²ΡΠΎΡ [112] Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ΄Π΅Π»Π°Π» Π΄Π΅ΡΡΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΏΠΎΠΌΠ΅Π½ΡΠ² ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ memset. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π‘ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΈΠΏΡ. Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΡΠΈΠΏΡ int, Π° ΡΡΠ΅ΡΠΈΠΉ β size_t β ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ unsigned int (ΡΠΎ Π΅ΡΡΡ ΡΠ΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°), Π½ΠΎ Π·Π°Π΄Π°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, 0 ΠΈ 16, ΡΠ²Π»ΡΡΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌΠΈ Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ ΡΠΈΠΏΠΎΠ² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ memset Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ»ΡΡ, Π½ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π»Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°Π΄Π°Π²Π°Π»ΠΎΡΡ Π½ΡΠ»Π΅Π²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΡΡ Π±Π°ΠΉΡΠΎΠ². ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π»Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ΅Π±ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 8 Π±Π°ΠΉΡ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π±ΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π² 0. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ bzero, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π΄Π²ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ bzero Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ²Π»Π΅Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π‘, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ inet_pton. ΠΠ½Π° ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ IPv6 (ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π). Π ΡΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠ΅ΡΠ½ΠΎ-Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (dotted-decimal string) ASCII Π² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ inet_addr, Π½ΠΎ Ρ Π½Π΅Π΅ Π΅ΡΡΡ ΡΡΠ΄ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ inet_pton. ΠΠ΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° (Π΅ΡΠ΅) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ; ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΅Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 3.7.