ื ืืืื ืืืืื ืืื ืคืึธืจืฉืืขืื ืฆื ืืืื ืืคืืขืจืงืืึทืืงืืึทื ืืขื ืืื "ืืื ืืงืก ืึทืคึผื. ื ืคืืืฉืืขื ืืืงืขืจ ืคืืจืขืจ" (ืืืืขืจืืขืฆืื ื ืคืื ืืขื ืืื ืื ืืื ืืงืก ืคึผืจืึธืืจืึทืืืื ื ืฆืืืื ื). ืขืก ืงืขื ืขื ืืืื ืึธืจืืขืจื ืืืืฃ ืื ืืืขืืืืืื ืคืื ืื ืึทืจืืืกืืขืืขืจ, ืืื ืืืื ืืืจ ืฆืืืืืื ืื ืคึผืขืจืืึธืืฉืึทื ืึทื ืงืึธื LinuxAPI , ืืืจ ืืืขื ืืึทืงืืืขื ืึท 30% ืึทืจืึธืคึผืจืขืืขื ืขื.
ืขืงืกืืจืึทืงื ืคืื ืืขื ืืื ืคึฟืึทืจ ืจืขืคึฟืขืจืขื ืฅ:
ืกืึธืงืงืขืฅ: ืกืขืจืืืืจืขืจ ืึทืจืืฉืืืขืงืืืจืข
ืืื ืืขื ืงืึทืคึผืืื, ืืืจ ืืืขืื ืืืกืงืืืืจื ืื ืืึทืกืืงืก ืคืื ืืืืืื ืื ื ืืืขืจืึทืืืืืข ืืื ืคึผืึทืจืึทืืขื ืกืขืจืืืขืจืก, ืืื ืืืื ืงืืง ืืื ืึท ืกืคึผืขืฆืืขื ืืขืืึธื ืืขืจืืคื inetd, ืืืึธืก ืืืื ืขืก ืืจืื ืืขืจ ืฆื ืฉืึทืคึฟื ืืื ืืขืจื ืขื ืกืขืจืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ื.
ืืืขืจืึทืืืื ืืื ืคึผืึทืจืึทืืขื ืกืขืจืืืขืจืก
ืขืก ืืขื ืขื ืฆืืืื ืคึผืจืึธืกื ืืึธืืขื-ืืืืืจื ื ืขืฅ ืกืขืจืืืขืจ ืึทืจืงืึทืืขืงืืฉืขืจื:
-
ืืืขืจืึทืืืื: ืืขืจ ืกืขืจืืืขืจ ืืืืื ื ืงืืืืึทื ืฅ ืืืื ืขืจ ืืื ืึท ืฆืืึทื, ืขืจืฉืืขืจ ืคึผืจืึทืกืขืกืื ื ืึท ืืงืฉื (ืึธืืขืจ ืขืืืขืืข ืจืืงืืืขืก) ืคืื ืืืื ืงืืืขื ื ืืื ืืขืืึธืื ืืึทื ืืืืฃ ืฆื ืืขืจ ืืืืึทืืขืจ;
-
ืคึผืึทืจืึทืืขื: ืืขืจ ืกืขืจืืืขืจ ืืื ืืืืืื ื ืฆื ืืื ืขื ืงืืืคื ืงืืืืึทื ืฅ ืกืืืืึทืืืืื ืืึทืกืื.
ืึท ืืืืฉืคึผืื ืคืื ืึท ืืืขืจืึทืืืื ืกืขืจืืืขืจ ืืืืืจื ืืืืฃ FIFO ืงืืื ืืื ืฉืืื ืืขืจืืื ืื ืืื ืึธืคึผืืืืืื ื 44.8.
ืืืขืจืึทืืืืืข ืกืขืจืืืขืจืก ืืขื ืขื ืืืืฉืึทืืืึทืื ืืืืื ืคึผืึทืกืืง ืืื ืกืืืืึทืืืึธื ืก ืืื ืงืืืขื ื ืจืืงืืืขืก ืงืขื ืขื ืืืื ืคึผืจืึทืกืขืกื ืคืขืจืื ืืขืฉืืืื ื, ืืืืึทื ืืขืืขืจ ืงืืืขื ื ืืื ืืขืฆืืืื ืืขื ืฆื ืืืึทืจืื ืืื ืงืืื ืื ืืขืจืข ืงืืืืึทื ืฅ ืืื ืคืจืึธื ื ืคืื ืืื ืืึธืื ืฉืืื ืืขืืื ื. ื ืคึผืจืึธืกื ื ืืฆื ืคืึทื ืคึฟืึทืจ ืืขื ืฆืืืึทื ื ืืื ืืขืจ ืืืขืงืกื ืคืื ืืืื ืจืืงืืืขืก ืืื ืจืขืกืคึผืึธื ืกืขืก ืฆืืืืฉื ืึท ืงืืืขื ื ืืื ืกืขืจืืืขืจ.
ืคึผืึทืจืึทืืขื ืกืขืจืืืขืจืก ืืขื ืขื ืคึผืึทืกืืง ืืื ืงืึทืกืขืก ืืื ืืขืืขืจ ืืงืฉื ื ืขืื ืึท ืืึทืืืืืืง ืกืืืข ืคืื โโโโืฆืืื ืฆื ืคึผืจืึธืฆืขืก, ืึธืืขืจ ืืื ืืขืจ ืงืืืขื ื ืืื ืกืขืจืืืขืจ ืืื ืืขื ืืื ืืึทื ื ืึธื ืืึธื ืืงืกืืฉืืื ืืืฉืื. ืืื ืืขื ืงืึทืคึผืืื, ืืืจ ืืืขืื ืืขืจ ืืืืคึผื ืคืึธืงืืก ืืืืฃ ืื ืืจืืืืฆืืื ืขืื (ืืื ืกืืืคึผืืึทืกื) ืืืขื ืคืื ืืืืืื ืื ื ืคึผืึทืจืึทืืขื ืกืขืจืืืขืจืก, ืืืึธืก ืืื ืฆื ืฉืึทืคึฟื ืึท ืืึทืืื ืืขืจ ืงืื ื ืคึผืจืึธืฆืขืก ืคึฟืึทืจ ืืขืืขืจ ื ืืึท ืงืืืขื ื. ืืขืจ ืคึผืจืึธืฆืขืก ืคึผืขืจืคืึธืจืื ืึทืืข ืื ืึทืจืืขื ืฆื ืืื ืขื ืืขื ืงืืืขื ื ืืื ืืขืืึธืื ืขื ืืก. ืืืืึทื ืืขืืขืจ ืคืื ืื ืคึผืจืึทืกืขืกืึทื ืึทืคึผืขืจืืืฅ ืื ืืืคึผืขื ืืึทื ืืื, ืขืก ืืื ืืขืืืขื ืฆื ืืื ืขื ืงืืืคื ืงืืืืึทื ืฅ ืกืืืืึทืืืืื ืืึทืกืื. ืื ืืืืคึผื ืึทืจืืขื ืคืื ืื ืืืืคึผื ืกืขืจืืืขืจ ืคึผืจืึธืฆืขืก (ืคืึธืืขืจ) ืืื ืฆื ืฉืึทืคึฟื ืึท ืืึทืืื ืืขืจ ืงืื ื ืคึฟืึทืจ ืืขืืขืจ ื ืืึท ืงืืืขื ื (ืึธืืืขืจื ืึทืืืืืื, ืคึฟืขืืขื ืคืื ืืืจืืคืืจืื ื ืงืขื ืขื ืืืื ืืืฉืืคื ืึทื ืฉืืึธื ืคืื ืคึผืจืึทืกืขืกืึทื).
ืืื ืื ืคืืืืขื ืืข ืกืขืงืฉืึทื ื, ืืืจ ืืืขืื ืงืืงื ืืื ืืืืฉืคืืื ืคืื ืืืขืจืึทืืืืืข ืืื ืคึผืึทืจืึทืืขื ืืื ืืขืจื ืขื ืคืขืื ืืึธืืขื ืกืขืจืืืขืจืก. ืื ืฆืืืื ืกืขืจืืืขืจืก ืื ืกืืจืืืขื ื ืึท ืกืืืคึผืืึทืคืืื ืืืขืจืกืืข ืคืื โโืื ืขืงืึธื ืืื ืกื (RFC 862), ืืืึธืก ืงืขืจื ืึท ืงืึธืคึผืืข ืคืื โโืงืืื ืึธื ืืึธื ืืขืฉืืงื ืฆื ืขืก ืืืจื ืึท ืงืืืขื ื.
ืืืขืจืึทืืืื ืืืคึผ ืกืขืจืืืขืจ ืืืืืขืจืงืึธื
ืืื ืืขื ืืื ืืขืจ ืืืืึทืืขืจ ืึธืคึผืืืืืื ื ืืืจ ืคืึธืจืฉืืขืื ืื ืกืขืจืืืขืจืก ืคึฟืึทืจ ืื ืขืงืึธื ืืื ืกื. ืขืก ืืื ืืืจืขืืืืื ืืืืฃ ืคึผืึธืจื ื ืืืขืจ 7 ืืื ืึทืจืืขื ืืืืขืจ ืืืืืข UDP ืืื TCP (ืืขื ืคึผืึธืจื ืืื ืจืขืืขืจืืืืจื, ืืื ืืขืจืืืขืจ ืื ืขืงืึธื ืกืขืจืืืขืจ ืืืื ืืืื ืืืืคื ืืื ืึทืืืื ืืกืืจืึทืืึธืจ ืคึผืจืืืืืืึทืืืฉืึทื).
ืืขืจ ืขืงืึธื ืืืคึผ ืกืขืจืืืขืจ ืงืึทื ืืื ืืืึทืกืื ืืืืขื ื ืืึทืืึทืืจืึทืืก ืืื ืงืขืจื ืงืืคืืขืก ืคืื ืืื ืฆื ืื ืกืขื ืืขืจ. ืืื ื ืืขืจ ืกืขืจืืืขืจ ื ืึธืจ ืืึทืจืฃ ืฆื ืคึผืจืึธืฆืขืก ืืืื ืึธื ืืึธื ืืื ืึท ืฆืืึทื, ืึทื ืืืขืจืึทืืืืืข ืึทืจืงืึทืืขืงืืฉืขืจ ืืืขื ืืืื ืืขื ืื. ืื ืืขืืขืจ ืืขืงืข ืคึฟืึทืจ ืื ืกืขืจืืืขืจืก ืืื ืืขืืืืื ืืื ืืืกืืื ื 56.1.
ืจืฉืืื 56.1. ืืขืืขืจ ืืขืงืข ืคึฟืึทืจ ืืืืื id_echo_sv.c ืืื id_echo_cl.c
#include "inet_sockets.h" /* ืืขืจืงืืขืจื ืื ืคืึทื ืืงืฉืึทื ื ืคืื ืืื ืืืขืจ ืืึธืืขื */
#ืึทืจืืึทื ื ืขืืขื "tlpi_hdr.h"
# ืืขืคืื ืืจื ืกืขืจืืืืก "ืขืงืึธื" /* UDP ืืื ืกื ื ืึธืืขื */
# ืืขืคืื ืืจื BUF_SIZE 500 /* ืืึทืงืกืืืื ืืจืืืก ืคืื ืืึทืืึทืืจืึทืืก ืึทื
ืงืขื ืขื ืืืื ืืืืขื ืขื ืืืจื ืงืืืขื ื ืืื ืกืขืจืืืขืจ */
_________________________________________________________________sockets/id_echo.h
ืืืกืืื ื 56.2 ืืืืืื ืื ืกืขืจืืืขืจ ืืืคึผืืึทืืขื ืืืืฉืึทื. ืื ืคืืืืขื ืืข ื ืงืืืืช ืืขื ืขื ืืืื ืฆื ืืืืขืจืงื:
-
ืฆื ืฉืืขืื ืืขื ืกืขืจืืืขืจ ืืื ืืึทืขืืึธื ืืึธืืข, ืืืจ ื ืืฆื ืื ืคืื ืงืฆืืข ืคืื โโืื ืืืขืจื ืืึทืขืืึธื () ืคึฟืื ืึธืคึผืืืืืื ื 37.2;
-
ืฆื ืืึทืื ืื ืคึผืจืึธืืจืึทื ืืขืจ ืกืึธืืื, ืืืจ ื ืืฆื ืื ืืืืืืึธืืขืง ืคึฟืึทืจ ืืจืืขืื ืืื ืืื ืืขืจื ืขื ืคืขืื ืกืึทืงืึทืฅ, ืืขืืืขืืึธืคึผืขื ืืื ืึธืคึผืืืืืื ื 55.12;
-
ืืืื ืืขืจ ืกืขืจืืืขืจ ืงืขื ื ืืฉื ืฆืืจืืงืงืืืขื ืึท ืขื ืืคืขืจ ืฆื ืืขื ืงืืืขื ื, ืขืก ืฉืจืืืื ืึท ืึธื ืืึธื ืฆื ืื ืงืืึธืฅ ืืื ืื ืกืืกืืึธื () ืจืืคื.
ืืื ืึท ืคืึทืงืืืฉ ืึทืคึผืืึทืงืืืฉืึทื, ืืืจ ืืืึธืื ืืกืชึผืื ืึธื ืืึธื ืขืืืขืืข ืฉืืขืืจ ืืืืฃ ืื ืึธืคืืงืืึทื ืคืื ืืึธืืื ื ืึทืจืืืงืืขื ื ืืฆื ืกืืกืืึธื (). ืืึธืก ืืืึธืื ืขืืืืื ืืจื ืื ืืขืืืขืืงืืื ืคืื ืึท ืึทืืึทืงืขืจ ืึธืืืืขืจืคืืึธืืื ื ืื ืกืืกืืขื ืงืืึธืฅ. ืืื ืึทืืืฉืึทื, ืืึธื ื ืื ืคืึทืจืืขืกื ืึทื ืืขืืขืจ ืจืืคื ืฆื ืกืืกืืึธื () ืืื ืืึทื ืฅ ืืืึทืขืจ, ืืืืึทื ืขืก ื ืืฆื fsync () ืืืจื ืคืขืืืงืืึทื.
ืจืฉืืื 56.2. ืืืขืจืึทืืืึธื ืกืขืจืืืขืจ ืืืึธืก ืืืคึผืืึทืืึทื ืฅ ืื UDP ืขืงืึธื ืืื ืกื
_________________________________________________________________sockets/id_echo_sv.c
# ืึทืจืืึทื ื ืขืืขื
# ืึทืจืืึทื ื ืขืืขื "id_echo.h"
#ืื clude "become_daemon.h"
ืื ื
main(int argc, char *argv[])
{
int sfd;
ssize_t numRead;
socklen_t len;
ืกืืจืืงืืืจ ืกืึธืงืงืึทืืืจ_ืกืืึธืจืืืืฉ ืงืืึทืืืจ;
char buf[BUF_SIZE];
char adrStr[IS_ADDR_STR_LEN];
ืืืื (ืืืขืจื ืืึทืขืืึธื (0) == -1)
errExit("ืืืขืจื ืืึทืขืืึธื");
sfd = inetBind(SERVICE, SOCK_DGRAM, NULL);
ืืืื (sfd == -1) {
syslog(LOG_ERR, "ืงืขื ื ืืฉื ืฉืึทืคึฟื ืกืขืจืืืขืจ ืืึธืืขื (%s)",
ืกืืจืขืจืจืึธืจ (ืขืจืจื ืึธ));
ืึทืจืืืกืืึทื ื (EXIT_FAILURE);
/* ืืึทืงืืืขื ืืึทืืึทืืจืึทืืขื ืืื ืฆืืจืืงืงืืืขื ืงืึธืคึผืืขืก ืคืื ืืื ืฆื ืื ืกืขื ืืขืจืก */
}
ืคึฟืึทืจ (;;) {
len = sizeof (ืกืืจืืงื ืกืึธืงืงืึทืืืจ_ืกืืึธืจืืืืฉ);
numRead = recvfrom(sfd, buf, BUF_SIZE, 0, (struct sockaddr *) &claddr, &len);
ืืืื (ื ืืืขืจืืืืขื ืขื == -1)
ืขืจืจืขืงืกืื ("ืจืขืงืืืคึฟืจืึธื");
ืืืื (ืืขืฉืืงื (sfd, buf, numRead, 0, (struct sockaddr *) &claddr, len)
!= ื ืืืขืจืืืืขื ืขื)
syslog(LOG_WARNING, "ืืขืืช ืืืืืขืจืงืึธืื ืขื ืืคืขืจ ืฆื %s (%s)",
inetAddressStr((struct sockaddr *) &claddr, len,
adrStr, IS_ADDR_STR_LEN),
ืกืืจืขืจืจืึธืจ (ืขืจืจื ืึธ));
}
}
_________________________________________________________________sockets/id_echo_sv.c
ืฆื ืคึผืจืืืืจื ืื ืึธืคึผืขืจืึทืฆืืข ืคืื โโืื ืกืขืจืืืขืจ, ืืืจ ื ืืฆื ืื ืคึผืจืึธืืจืึทื ืคึฟืื ืืืกืืื ื 56.3. ืขืก ืืืื ื ืืฆื ืื ืืืืืืึธืืขืง ืคึฟืึทืจ ืืจืืขืื ืืื ืืื ืืขืจื ืขื ืคืขืื ืกืึทืงืึทืฅ, ืืขืืืขืืึธืคึผืขื ืืื ืึธืคึผืืืืืื ื 55.12. ืืื ืืขืจ ืขืจืฉืืขืจ ืืึทืคึฟืขืื ืฉืืจื ืึทืจืืืืขื ื, ืืขืจ ืงืืืขื ื ืคึผืจืึธืืจืึทื ื ืขืื ืื ื ืึธืืขื ืคืื ืื ื ืขืฅ ื ืึธืืข ืืืืฃ ืืืึธืก ืื ืกืขืจืืืขืจ ืืื ืืืื. ืืขืจ ืงืืืขื ื ืืืื ืืจืืื ืืื ื ืฉืืืืฃ ืืืื ืขืจ ืฉืืงื ืืขืืข ืคืื โโืื ืืืืขืจืืืข ืืจืืืืขื ืื ืฆืื ืกืขืจืืืขืจ ืืืก ืืืืื ืืขืจืข ืืืืืืจืื, ืืื ืืื ืืืืขื ื ืืื ืืจืืงื ืื ืืืืืืจืื ืืืืก ืขืจ ืืืงืืื ืคืื ืื ืกืขืจืืืขืจ ืืื ืขื ืืคืขืจ.
ืจืฉืืื 56.3. ืงืืืขื ื ืคึฟืึทืจ UDP ืขืงืึธื ืืื ืกื
# ืึทืจืืึทื ื ืขืืขื "id_echo.h"
ืื ื
main(int argc, char *argv[])
{
int sfd, ืืืฉ;
ืืจืืืก_ื ืืขื ;
ssize_t numRead;
char buf[BUF_SIZE];
ืืืื (ืึทืจืืง <2 || ืกืืจืงืืคึผ (ืึทืจืืื [1], "--ืืืืฃ") == 0)
usageErr ("%s ืืึทืืขืืึธืก ืืกื ... n", ืึทืจืืื [0]);
/* ืคืึธืจืขื ืื ืกืขืจืืืขืจ ืึทืืจืขืก ืืืืืจื ืืืืฃ ืืขืจ ืขืจืฉืืขืจ ืืึทืคึฟืขืื ืฉืืจื ืึทืจืืืืขื ื */
sfd = inetConnect (ืึทืจืืื [1], ืกืขืจืืืืก, SOCK_DGRAM);
ืืืื (sfd == -1)
fatal ("ืงืขื ื ืืฉื ืคืึทืจืืื ืื ืฆื ืกืขืจืืืขืจ ืืึธืืขื");
/* ืฉืืงื ืื ืจืืขื ืึทืจืืืืขื ืื ืฆื ืื ืกืขืจืืืขืจ ืืื ืื ืคืึธืจืขื ืคืื ืืึทืืื ืืขืจ ืืึทืืึทืืจืึทืื */
ืคึฟืึทืจ (ืืืฉ = 2; ืืืฉ < ืึทืจืืง; ืืืฉ++) {
len = ืกืืจืืขื (ืึทืจืืื[ืืืฉ]);
ืืืื (ืฉืจืืึทืื (sfd, argv[j], len) != len)
ืคืึทืืึทื ("ืคึผืึทืจืืืืืฉ / ื ืื ืึทื ืืขืจืฉ ืฉืจืืึทืื");
numRead = ืืืืขื ืขื (sfd, buf, BUF_SIZE);
ืืืื (ื ืืืขืจืืืืขื ืขื == -1)
errExit ("ืืืืขื ืขื");
printf ("[%ืื ืืืืขืก] %.*sn", (ืืึทื ื) numRead, (ืื ื) numRead, buf);
}
ืึทืจืืืกืืึทื ื (EXIT_SUCCESS);
}
__________________________________________________________________sockets/id_echo_cl.c
ืื ืืขืจ ืืื ืึท ืืืืฉืคึผืื ืคืื ืืืึธืก ืืืจ ืืืขืื ืืขื ืืืขื ืคืืืกื ืืืง ืื ืกืขืจืืืขืจ ืืื ืฆืืืื ืงืืืขื ื ืื ืกืืึทื ืกืื:
$su // ืคึผืจืืืืืืึทืืืฉืึทื ืืขื ืขื ืคืืจืืื ืื ืฆื ืืื ืื ืฆื ืึท ืจืขืืขืจืืืืจื ืคึผืึธืจื
ืคึผืึทืจืึธื:
# ./id_echo_sv // ืกืขืจืืืืจืขืจ ืืืื ืืื ืืื ืืขืจืืจืื ื ืืึธืืข
# ืึทืจืืืกืืึทื ื // ืืขืื ืึทืจืืืฃ ืึทืืืื ืืกืืจืึทืืึธืจ ืจืขืื
$ ./id_echo_cl localhost ืืขืื ืืืขืื // ืืขืจ ืงืืืขื ื ืกืขื ืื ืฆืืืื ืืึทืืึทืืจืึทืืก
[5 ืืืืขืก] ืืขืื // ืืขืจ ืงืืืขื ื ืืืกืคึผืืืื ืื ืขื ืืคืขืจ ืืืงืืืขื ืคืื ืื ืกืขืจืืืขืจ
[5 ืืืืขืก] ืืืขืื
$ ./id_echo_cl localhost ืืืึท ืืขืืื ื // ืืขืจ ืงืืืขื ื ืกืขื ืื ืืืื ืืึทืืึทืืจืึทื
[7 ืืืืขืก] ืืืึท ืืขืืื ื
ืืื ืืืื ืืฉื ืืืจ ืึท ืึธื ืืขื ืขื ืืืืขื ืขื)
ืืงืืจ: linux.org.ru