9 err_quit("usage: tcpcli <IPaddress>");
10 sockfd = Socket(AF_INET, SOCK_STREAM, 0);
11 bzero(&servaddr, sizeof(servaddr));
12 servaddr.sin_family = AF_INET;
13 servaddr.sin_port = htons(SERV_PORT);
14 Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
15 Connect(sockfd, (SA*)&servaddr, sizeof(servaddr));
16 ling.l_onoff = 1; /* Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° RST ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ */
17 ling.l_linger = 0;
18 Setsockopt(sockfd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
19 Close(sockfd);
20 exit(0);
21 }
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠΊΠ΅ΡΠ° SO_LINGER16-19 ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΌΡ Π·Π°Π΄Π°Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎΠΊΠ΅ΡΠ° SO_LINGER, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ ΡΠ»Π°Π³ l_onoff Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈ ΠΎΠ±Π½ΡΠ»ΡΡ Π²ΡΠ΅ΠΌΡ l_linger. ΠΠ°ΠΊ ΡΡΠ²Π΅ΡΠΆΠ΄Π°Π»ΠΎΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 7.5, ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΡ RST Π½Π° ΡΠΎΠΊΠ΅ΡΠ΅ TCP ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ close ΠΌΡ Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠΊΠ΅Ρ.
ΠΠΎΡΠΎΠΌ ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ Π½Π°Ρ ΡΠ΅ΡΠ²Π΅Ρ TCP, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π² Π»ΠΈΡΡΠΈΠ½Π³Π°Ρ 6.3 ΠΈ 6.4, Ρ ΡΠ΅ΠΌ ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ select ΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ accept Π½Π°ΡΡΡΠΏΠ°Π»Π° ΠΏΠ°ΡΠ·Π°. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅, Π²Π·ΡΡΠΎΠΌ ΠΈΠ· Π½Π°ΡΠ°Π»Π° Π»ΠΈΡΡΠΈΠ½Π³Π° 6.4, Π΄Π²Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π·Π½Π°ΠΊΠΎΠΌ +.
if (FD_ISSET(listenfd, &rset)) { /* Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ */
+ printf("listening socket readable\n");
+ sleep(5);
clilen = sizeof(cliaddr);
connfd = Accept(listenfd, (SA*)&cliaddr, &clilen);
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΈΠΌΠΈΡΠΈΡΡΠ΅ΠΌ Π·Π°Π½ΡΡΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ accept ΡΡΠ°Π·Ρ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΡ select ΡΠΎΠΎΠ±ΡΠΈΡ, ΡΡΠΎ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠΎΠΊΠ΅Ρ Π³ΠΎΡΠΎΠ² Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΠ±ΡΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ (Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΡΡΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ). ΠΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΈΠ±ΡΠ» ΡΠ΅Π³ΠΌΠ΅Π½Ρ RST, Ρ Π½Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
Π ΡΠ°Π·Π΄Π΅Π»Π΅ 5.11 ΠΌΡ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΈ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ°Π·ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ accept, Π² ΠΠ΅ΡΠΊΠ»ΠΈ-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΠΏΡΠ΅ΡΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ ECONNABORTED, Π½ΠΎ ΡΠ°ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ EPROTO. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΠ΅ΡΠΊΠ»ΠΈ-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ.
β ΠΠ»ΠΈΠ΅Π½Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΡΠ΅ΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 16.14.
β Π€ΡΠ½ΠΊΡΠΈΡ select ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³ΠΎΡΠΎΠ² Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, Π½ΠΎ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ accept Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅, Ρ ΠΎΡΡ ΠΈ Π½Π΅ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅, Π²ΡΠ΅ΠΌΡ.
β ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ select, ΠΈ ΠΏΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ Π±ΡΠ»Π° Π²ΡΠ·Π²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ accept, ΠΏΡΠΈΠ±ΡΠ» ΡΠ΅Π³ΠΌΠ΅Π½Ρ RST ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
β Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΠΈ ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ.
β Π‘Π΅ΡΠ²Π΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ accept, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π½Π΅Ρ, ΠΎΠ½ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½.
Π‘Π΅ΡΠ²Π΅Ρ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ accept Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Ρ Π½ΠΈΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 6.4, Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ½ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ accept ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π³ΠΎΡΠΎΠ²ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ.
ΠΠ ΠΠΠΠ§ΠΠΠΠΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ Π°ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠΏΠ° Β«ΠΎΡΠΊΠ°Π· Π² ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈΒ», ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 6.8. ΠΠ΄Π½Π°ΠΊΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅.
Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡ Π΄Π²Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π°:
1. ΠΡΠ΅Π³Π΄Π° Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠΎΠΊΠ΅Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΌ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ select Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, Π³ΠΎΡΠΎΠ²ΠΎ Π»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ accept.
2. ΠΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ accept: EWOULDBLOCK (Π΄Π»Ρ ΠΠ΅ΡΠΊΠ»ΠΈ-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ°Π·ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅), ECONNABORTED (Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ POSIX, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ°Π·ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅), EPROTO (Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ SVR4, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ°Π·ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅) ΠΈ EINTR (Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠΈΠ³Π½Π°Π»Ρ).
16.7. Π Π΅Π·ΡΠΌΠ΅
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 16.2 ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π½Π°Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ str_cli, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ TCP Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ select ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠΌ Π²Π²ΠΎΠ΄ΠΎΠΌ-Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠ°Π½Π΅Ρ Π³ΠΎΡΠΎΠ² Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ. ΠΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΠΉ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΈΠ· Π²ΡΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΠ΅ΠΉ, Ρ ΠΎΡΡ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π° Π΄Π²Π΅ ΡΠ°ΡΡΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ fork. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡ ΠΆΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 26.1.
ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ connect ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠ΅Ρ ΡΡΠ°ΠΏΠ½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΡ TCP Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ connect. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Ρ ΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΡΠ·Π°Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΏΠ΅ΡΠ½ΠΎ Π»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½ΡΡ, ΠΎΡΠΊΡΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ TCP Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ Π·Π°ΡΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π·Π°ΡΡΠ°ΡΡ, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Β«Π½Π΅Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠΈΒ», ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ TCP, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΌ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ (congestion avoidance).
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ
1. ΠΠ±ΡΡΠΆΠ΄Π°Ρ Π»ΠΈΡΡΠΈΠ½Π³ 16.6, ΠΌΡ ΠΎΡΠΌΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ shutdown, Π° Π½Π΅ ΡΡΠ½ΠΊΡΠΈΡ close. ΠΠΎΡΠ΅ΠΌΡ?
2. Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 16.6, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΠΏΡΠ΅ΠΆΠ΄Π΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΈΠ·Π½Π°ΠΊ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π°, Π½ΠΎ Π½Π΅ ΡΠ²Π΅Π΄ΠΎΠΌΠΈΡ ΠΎΠ± ΡΡΠΎΠΌ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ?
3. Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 16.6, Π΅ΡΠ»ΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°ΡΠ΅ΠΌ ΡΡΠΈΡΠ°Π΅Ρ ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π° Π½Π° ΡΠΎΠΊΠ΅ΡΠ΅?
4. Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 16.7, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ:
if (n == 0)
goto done; /* ΡΡΠ½ΠΊΡΠΈΡ connect Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ */
5. Π ΡΠ°Π·Π΄Π΅Π»Π΅ 16.3 ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠΎΠΊΠ΅ΡΠ° ΠΏΡΠΈΠ΄ΡΡ ΡΠ°Π½ΡΡΠ΅, ΡΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ connect. ΠΠΎΠ³Π΄Π° ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΡΠΈΡΡΡΡ?
ΠΠ»Π°Π²Π° 17
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ioctl
17.1. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π€ΡΠ½ΠΊΡΠΈΡ ioctl ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΡΠ²Π»ΡΠ»Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΠ»ΠΎ Π² ΠΊΠ°ΠΊΡΡ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΡΡ ΡΠ΅ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ. POSIX ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ ioctl, ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π·Π°ΠΌΠ΅Π½ΡΡΡΠΈΠ΅ Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΡΡ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° Unix ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ»ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ioctl, Π½ΠΎ Π² POSIX Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ 12 Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠ²: tcgetattr Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°, tcflush Π΄Π»Ρ ΠΎΠΏΡΡΡΠΎΡΠ΅Π½ΠΈΡ Π±ΡΡΠ΅ΡΠΎΠ² Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄Π°, ΠΈ Ρ.Π΄. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ POSIX Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΎΠ΄Π½Ρ ΡΠ΅ΡΠ΅Π²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ioctl: Π½ΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ sockatmark (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 24.3) Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SIOCATMARK ioctl. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡΠΎΡΠΈΠ΅ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ioctl ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΊΡΡΡ ARP (Address Resolution Protocol β ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ²).
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΎΠ±Π·ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΡΠ½ΠΊΡΠΈΠΈ ioctl, ΠΈΠΌΠ΅ΡΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΡΠ΅Π²ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΎΡ 4.4BSD ΠΈ Solaris 2.6, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΎΠΊΠ΅ΡΡ Π΄ΠΎΠΌΠ΅Π½Π° AF_ROUTE (ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΡ) Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΈΠ· ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΡ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ Π² Π³Π»Π°Π²Π΅ 18.
ΠΠ±ΡΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ΅ΡΠ²Π΅ΡΡ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ioctl Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ ΡΠ·Π»Π° ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Ρ ΡΠ΅ΠΌ ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π²ΡΡΡΠ½ΠΈΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΈΡΠΎΠΊΠΎΠ²Π΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ, ΠΌΠ½ΠΎΠ³ΠΎΠ°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈ Ρ.Π΄. ΠΠ»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π½Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ. Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ioctl, Π° Π² Π³Π»Π°Π²Π΅ 18 β Π΄ΡΡΠ³ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΡ.
17.2. Π€ΡΠ½ΠΊΡΠΈΡ ioctl
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½Ρ fd.
#include <unistd.h>
int ioctl(int fd, int request, ... /* void *arg */ );
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ: 0 Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, -1 Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ
Π’ΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ, Π½ΠΎ ΡΠΈΠΏ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° request.