เชถเซเชญ เชฌเชชเซเชฐ เชนเซเช เชคเชฎเชพเชฐเชพ เชงเซเชฏเชพเชจ เชชเชฐ เชชเซเชธเซเชคเช โLinux API เชฐเชเซ เชเชฐเซเช เชเซเช. เชเช เชตเซเชฏเชพเชชเช เชฎเชพเชฐเซเชเชฆเชฐเซเชถเชฟเชเชพ" (เชชเซเชธเซเชคเชเชจเซ เช เชจเซเชตเชพเชฆ Linux เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เชเชจเซเชเชฐเชซเซเชธ). เชคเซ เชชเซเชฐเชเชพเชถเชเชจเซ เชตเซเชฌเชธเชพเชเช เชชเชฐ เชเชฐเซเชกเชฐ เชเชฐเซ เชถเชเชพเชฏ เชเซ เช เชจเซ เชเซ เชคเชฎเซ เชชเซเชฐเชฎเซเชถเชจเชฒ เชเซเชก เชฒเชพเชเซ เชเชฐเซ เชเซ LinuxAPI , เชคเชฎเชจเซ 30% เชกเชฟเชธเซเชเชพเชเชจเซเช เชฎเชณเชถเซ.
เชธเชเชฆเชฐเซเชญ เชฎเชพเชเซ เชชเซเชธเซเชคเชเชฎเชพเชเชฅเซ เช เชตเชคเชฐเชฃ:
เชธเซเชเซเชเซเชธ: เชธเชฐเซเชตเชฐ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ
เช เชชเซเชฐเชเชฐเชฃเชฎเชพเช, เช เชฎเซ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช เชจเซ เชธเชฎเชพเชเชคเชฐ เชธเชฐเซเชตเชฐเซเชจเซ เชกเชฟเชเชพเชเชจ เชเชฐเชตเชพเชจเซ เชฎเซเชณเชญเซเชค เชฌเชพเชฌเชคเซเชจเซ เชเชฐเซเชเชพ เชเชฐเซเชถเซเช, เช เชจเซ inetd เชจเชพเชฎเชจเชพ เชตเชฟเชถเชฟเชทเซเช เชกเชฟเชฎเชจเชจเซ เชชเชฃ เชเซเชเชถเซเช, เชเซ เชเชจเซเชเชฐเชจเซเช เชธเชฐเซเชตเชฐ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเชตเชพเชจเซเช เชธเชฐเชณ เชฌเชจเชพเชตเซ เชเซ.
เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช เชจเซ เชธเชฎเชพเชเชคเชฐ เชธเชฐเซเชตเชฐเซเชธ
เชคเซเชฏเชพเช เชฌเซ เชธเชพเชฎเชพเชจเซเชฏ เชธเซเชเซเช-เชเชงเชพเชฐเชฟเชค เชจเซเชเชตเชฐเซเช เชธเชฐเซเชตเชฐ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชเซ:
-
เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค: เชธเชฐเซเชตเชฐ เชเซเชฒเชพเชฏเชเชเชจเซ เชเช เชธเชฎเชฏเซ เชเช เชธเซเชตเชพ เชเชชเซ เชเซ, เชชเซเชฐเชฅเชฎ เชเช เชเซเชฒเชพเชฏเชเชเชจเซ เชตเชฟเชจเชเชคเซ (เช เชฅเชตเชพ เชเชฃเซ เชตเชฟเชจเชเชคเซเช) เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชเซ เช เชจเซ เชชเชเซ เชฌเซเชเชพ เชชเชฐ เชเชพเชฏ เชเซ;
-
เชธเชฎเชพเชเชคเชฐ: เชธเชฐเซเชตเชฐ เชเชเชธเชพเชฅเซ เชฌเชนเซเชตเชฟเชง เชเซเชฐเชพเชนเชเซเชจเซ เชธเซเชตเชพ เชเชชเชตเชพ เชฎเชพเชเซ เชฐเชเชพเชฏเซเชฒ เชเซ.
FIFO เชเชคเชพเชฐ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชธเชฐเซเชตเชฐเชจเซเช เชเชฆเชพเชนเชฐเชฃ เชชเชนเซเชฒเซเชฅเซ เช เชตเชฟเชญเชพเช 44.8 เชฎเชพเช เชฐเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช.
เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชธเชฐเซเชตเชฐเซเชธ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชซเชเซเชค เชคเซ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชเชฎเชพเช เช เชฏเซเชเซเชฏ เชนเซเชฏ เชเซ เชเซเชฏเชพเช เชเซเชฒเชพเชฏเชเชเชจเซ เชตเชฟเชจเชเชคเซเช เชเชเชฆเชฎ เชเชกเชชเชฅเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชเชพเชฐเชฃ เชเซ เชฆเชฐเซเช เชเซเชฒเชพเชฏเชเชเชจเซ เชคเซเชจเซ เชธเชพเชฎเซเชจเชพ เชเซเชเชชเชฃ เช เชจเซเชฏ เชเซเชฒเชพเชฏเชเชเชจเซ เชธเซเชตเชพ เชเชชเชตเชพเชฎเชพเช เชจ เชเชตเซ เชคเซเชฏเชพเช เชธเซเชงเซ เชฐเชพเชน เชเซเชตเชพเชจเซ เชซเชฐเช เชชเชพเชกเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เช เช เชญเชฟเชเชฎ เชฎเชพเชเซ เชธเชพเชฎเชพเชจเซเชฏ เชเชชเชฏเซเชเชจเซ เชเซเชธ เช เชเซเชฒเชพเชฏเชเช เช เชจเซ เชธเชฐเซเชตเชฐ เชตเชเซเชเซ เชเชเชฒ เชตเชฟเชจเชเชคเซเช เช เชจเซ เชชเซเชฐเชคเชฟเชธเชพเชฆเซเชจเซเช เชตเชฟเชจเชฟเชฎเชฏ เชเซ.
เชธเชฎเชพเชเชคเชฐ เชธเชฐเซเชตเชฐเซเชธ เชเชตเชพ เชเชฟเชธเซเชธเชพเชเชฎเชพเช เชฏเซเชเซเชฏ เชเซ เชเซ เชเซเชฏเชพเช เชฆเชฐเซเช เชตเชฟเชจเชเชคเซ เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพเชฎเชพเช เชจเซเชเชงเชชเชพเชคเซเชฐ เชธเชฎเชฏ เชฒเชพเชเซ เชเซ, เช เชฅเชตเชพ เชเซเชฏเชพเช เชเซเชฒเชพเชฏเชเช เช เชจเซ เชธเชฐเซเชตเชฐ เชฒเชพเชเชฌเชพ เชฎเซเชธเซเช เชเชเซเชธเชเซเชจเซเชเชฎเชพเช เชเซเชกเชพเชฏ เชเซ. เช เชชเซเชฐเชเชฐเชฃเชฎเชพเช, เช เชฎเซ เชฎเซเชเซเชฏเชคเซเชตเซ เชธเชฎเชพเชเชคเชฐ เชธเชฐเซเชตเชฐเซเชธ เชกเชฟเชเชพเชเชจ เชเชฐเชตเชพเชจเซ เชชเชฐเชเชชเชฐเชพเชเชค (เช เชจเซ เชธเชฐเชณ) เชฐเซเชค เชชเชฐ เชงเซเชฏเชพเชจ เชเซเชจเซเชฆเซเชฐเชฟเชค เชเชฐเซเชถเซเช, เชเซ เชฆเชฐเซเช เชจเชตเชพ เชเซเชฒเชพเชฏเชจเซเช เชฎเชพเชเซ เชเช เช เชฒเช เชเชพเชเชฒเซเชก เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฌเชจเชพเชตเชตเชพเชจเซ เชเซ. เช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเซเชฒเชพเชฏเชจเซเชเชจเซ เชธเซเชตเชพ เชเชชเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฎ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เช เชจเซ เชชเชเซ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เชเซ. เชเชพเชฐเชฃ เชเซ เช เชฆเชฐเซเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชธเซเชตเชคเชเชคเซเชฐ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ, เชเชเชธเชพเชฅเซ เชฌเชนเซเชตเชฟเชง เชเซเชฐเชพเชนเชเซเชจเซ เชธเซเชตเชพ เชเชชเชตเชพเชจเซเช เชถเชเซเชฏ เชเซ. เชฎเซเชเซเชฏ เชธเชฐเซเชตเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ (เชฎเชพเชคเชพเชชเชฟเชคเชพ) เชจเซเช เชฎเซเชเซเชฏ เชเชพเชฐเซเชฏ เชฆเชฐเซเช เชจเชตเชพ เชเซเชฒเชพเชฏเชเช เชฎเชพเชเซ เชเช เช เชฒเช เชฌเชพเชณเช เชฌเชจเชพเชตเชตเชพเชจเซเช เชเซ (เชตเซเชเชฒเซเชชเชฟเช เชฐเซเชคเซ, เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชเชจเซ เชฌเชฆเชฒเซ เช เชฎเชฒเชจเชพ เชฅเซเชฐเซเชกเซ เชฌเชจเชพเชตเซ เชถเชเชพเชฏ เชเซ).
เชจเซเชเซเชจเชพ เชตเชฟเชญเชพเชเซเชฎเชพเช, เช เชฎเซ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช เชจเซ เชธเชฎเชพเชเชคเชฐ เชเชจเซเชเชฐเชจเซเช เชกเซเชฎเซเชจ เชธเซเชเซเช เชธเชฐเซเชตเชฐเชจเชพ เชเชฆเชพเชนเชฐเชฃเซ เชเซเชเชถเซเช. เช เชฌเซ เชธเชฐเซเชตเชฐเซเชธ เชเชเซ เชธเชฐเซเชตเชฟเชธ (RFC 862) เชจเซเช เชธเชฐเชณ เชธเชเชธเซเชเชฐเชฃ เช เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชเซ, เชเซ เชเซเชฒเชพเชฏเชจเซเช เชฆเซเชตเชพเชฐเชพ เชคเซเชจเซ เชฎเซเชเชฒเชตเชพเชฎเชพเช เชเชตเซเชฒเชพ เชเซเชเชชเชฃ เชธเชเชฆเซเชถเชจเซ เชจเชเชฒ เชชเชฐเชค เชเชฐเซ เชเซ.
เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค UDP เชธเชฐเซเชตเชฐ เชเชเซ
เช เช เชจเซ เชชเชเซเชจเชพ เชตเชฟเชญเชพเชเชฎเชพเช เชเชชเชฃเซ เชเชเซ เชธเซเชตเชพ เชฎเชพเชเซ เชธเชฐเซเชตเชฐเซเชจเซ เชชเชฐเชฟเชเชฏ เชเชฐเซเชถเซเช. เชคเซ เชชเซเชฐเซเช เชจเชเชฌเชฐ 7 เชชเชฐ เชเชชเชฒเชฌเซเชง เชเซ เช เชจเซ UDP เช เชจเซ TCP เชฌเชเชจเซ เชชเชฐ เชเชพเชฎ เชเชฐเซ เชเซ (เช เชชเซเชฐเซเช เชเชฐเชเซเชทเชฟเชค เชเซ, เช เชจเซ เชคเซเชฅเซ เชเชเซ เชธเชฐเซเชตเชฐ เชเชกเชฎเชฟเชจเชฟเชธเซเชเซเชฐเซเชเชฐ เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซ เชธเชพเชฅเซ เชเชพเชฒเชตเซเช เชเชตเชถเซเชฏเช เชเซ).
เชเชเซ UDP เชธเชฐเซเชตเชฐ เชธเชคเชค เชกเซเชเชพเชเซเชฐเชพเชฎ เชตเชพเชเชเซ เชเซ เช เชจเซ เชชเซเชฐเซเชทเชเชจเซ เชคเซเชจเซ เชจเชเชฒเซ เชชเชฐเชค เชเชฐเซ เชเซ. เชธเชฐเซเชตเชฐเชจเซ เชเช เชธเชฎเชฏเซ เชฎเชพเชคเซเชฐ เชเช เชธเชเชฆเซเชถ เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชนเซเชตเชพเชฅเซ, เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชชเซเชฐเชคเซเช เชนเชถเซ. เชธเชฐเซเชตเชฐเซ เชฎเชพเชเซเชจเซ เชนเซเชกเชฐ เชซเชพเชเชฒ เชฒเชฟเชธเซเชเชฟเชเช 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 เชฎเชพเชเชฅเซ becomeDaemon() เชซเชเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช;
-
เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชตเชงเซ เชเซเชฎเซเชชเซเชเซเช เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ, เช เชฎเซ เชตเชฟเชญเชพเช 55.12 เชฎเชพเช เชตเชฟเชเชธเชฟเชค เชเชจเซเชเชฐเชจเซเช เชกเซเชฎเซเชจ เชธเซเชเซเชเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชฒเชพเชเชฌเซเชฐเซเชฐเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช;
-
เชเซ เชธเชฐเซเชตเชฐ เชเซเชฒเชพเชฏเชจเซเชเชจเซ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชเชชเซ เชถเชเชคเซเช เชจเชฅเซ, เชคเซ เชคเซ syslog() เชเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฒเซเช เชชเชฐ เชธเชเชฆเซเชถ เชฒเชเซ เชเซ.
เชตเชพเชธเซเชคเชตเชฟเช เชเชชเซเชฒเชฟเชเซเชถเชจเชฎเชพเช, เช เชฎเซ syslog() เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฒเซเชเชฟเชเช เชธเชเชฆเซเชถเชพเชเชจเซ เชเชตเชฐเซเชคเชจ เชชเชฐ เช เชฎเซเช เชฎเชฐเซเชฏเชพเชฆเชพ เชฒเชพเชฆเซเชถเซเช. เชเชจเชพเชฅเซ เชนเซเชฎเชฒเชพเชเซเชฐ เชธเชฟเชธเซเชเชฎ เชฒเซเชเชจเซ เชเชตเชฐเชซเซเชฒเซ เชเชฐเชตเชพเชจเซ เชถเชเซเชฏเชคเชพเชจเซ เชฆเซเชฐ เชเชฐเชถเซ. เชตเชงเซเชฎเชพเช, เชญเซเชฒเชถเซ เชจเชนเซเช เชเซ syslog() เชชเชฐเชจเซ เชฆเชฐเซเช เชเซเชฒ เชเชฃเซ เชเชฐเซเชเชพเชณ เชเซ, เชเชพเชฐเชฃ เชเซ เชคเซ เชฎเซเชณเชญเซเชค เชฐเซเชคเซ fsync() เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ.
เชฒเชฟเชธเซเชเชฟเชเช 56.2. เชเชเชฐเซเชถเชจ เชธเชฐเซเชตเชฐ เชเซ เชเซ UDP เชเชเซ เชธเซเชตเชพเชจเซ เช เชฎเชฒ เชเชฐเซ เชเซ
_____________________________________________________________________ sockets/id_echo_sv.c
# เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ
# "id_echo.h" เชจเซ เชธเชฎเชพเชตเซเชถ เชเชฐเซ
# "become_daemon.h" เชถเชพเชฎเซเชฒ เชเชฐเซ
เชชเซเชฐเซเชฃเชพเชเช
เชฎเซเชเซเชฏ (int argc, char *argv[])
{
int sfd;
size_t numRead;
socklen_t เชฒเซเชจ;
struct sockaddr_storage claddr;
char buf[BUF_SIZE];
char addrStr[IS_ADDR_STR_LEN];
เชเซ (เชฌเชจเซ เชกเซเชฎเชจ(0) == -1)
errExit("becomeDaemon");
sfd = inetBind(เชธเซเชตเชพ, SOCK_DGRAM, NULL);
เชเซ (sfd == -1) {
syslog(LOG_ERR, "เชธเชฐเซเชตเชฐ เชธเซเชเซเช เชฌเชจเชพเชตเซ เชถเชเชพเชฏเซเช เชจเชฅเซ (%s)",
strerror(errno));
เชฌเชนเชพเชฐ เชจเซเชเชณเซ(EXIT_FAILURE);
/* เชกเซเชเชพเชเซเชฐเชพเชฎ เชฎเซเชณเชตเซ เช
เชจเซ เชชเซเชฐเซเชทเชเซเชจเซ เชคเซเชจเซ เชจเชเชฒเซ เชชเชฐเชค เชเชฐเซ */
}
เชฎเชพเชเซ (;;) {
len = sizeof(struct sockaddr_storage);
numRead = recvfrom(sfd, buf, BUF_SIZE, 0, (struct sockaddr *) &claddr, &len);
เชเซ (เชธเชเชเซเชฏเชพ เชตเชพเชเชเซ == -1)
errExit("recvfrom");
เชเซ (sendto(sfd, buf, numRead, 0, (struct sockaddr *) &claddr, len)
!= numRead)
syslog(LOG_WARNING, "%s (%s) เชจเซ เชชเซเชฐเชคเชฟเชญเชพเชต เชเชเซ เชเชฐเชตเชพเชฎเชพเช เชญเซเชฒ",
inetAddressStr((เชธเซเชเซเชฐเชเซเช sockaddr*) &claddr, len,
addrStr, IS_ADDR_STR_LEN),
strerror(errno));
}
}
_____________________________________________________________________ sockets/id_echo_sv.c
เชธเชฐเซเชตเชฐเชจเซ เชเชพเชฎเชเซเชฐเซ เชเชเชพเชธเชตเชพ เชฎเชพเชเซ, เช เชฎเซ เชฒเชฟเชธเซเชเชฟเชเช 56.3เชฎเชพเชเชฅเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช. เชคเซ เชเชจเซเชเชฐเชจเซเช เชกเซเชฎเซเชจ เชธเซเชเซเชเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชฒเชพเชเชฌเซเชฐเซเชฐเซเชจเซ เชชเชฃ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เชเซ เชตเชฟเชญเชพเช 55.12 เชฎเชพเช เชตเชฟเชเชธเชฟเชค เชเซ. เชชเซเชฐเชฅเชฎ เชเชฆเซเชถ เชตเชพเชเซเชฏ เชฆเชฒเซเชฒ เชคเชฐเซเชเซ, เชเซเชฒเชพเชฏเชเช เชชเซเชฐเซเชเซเชฐเชพเชฎ เชจเซเชเชตเชฐเซเช เชจเซเชกเชจเซเช เชจเชพเชฎ เชฒเซ เชเซ เชเซเชจเชพ เชชเชฐ เชธเชฐเซเชตเชฐ เชธเซเชฅเชฟเชค เชเซ. เชเซเชฒเชพเชฏเชเช เชเช เชฒเซเชชเชฎเชพเช เชชเซเชฐเชตเซเชถ เชเชฐเซ เชเซ เชเซเชฏเชพเช เชคเซ เชฆเชฐเซเช เชฌเชพเชเซเชจเซ เชฆเชฒเซเชฒเซ เชธเชฐเซเชตเชฐเชจเซ เช เชฒเช เชกเซเชเชพเชเซเชฐเชพเชฎ เชคเชฐเซเชเซ เชฎเซเชเชฒเซ เชเซ, เช เชจเซ เชชเชเซ เชคเซเชจเซ เชชเซเชฐเชคเชฟเชญเชพเชตเชฎเชพเช เชธเชฐเซเชตเชฐ เชชเชพเชธเซเชฅเซ เชฎเซเชณเชตเซเชฒเชพ เชกเซเชเชพเชเซเชฐเชพเชฎเชจเซ เชตเชพเชเชเซ เชเซ เช เชจเซ เชเชพเชชเซ เชเซ.
เชฒเชฟเชธเซเชเชฟเชเช 56.3. UDP เชเชเซ เชธเซเชตเชพ เชฎเชพเชเซ เชเซเชฒเชพเชฏเชจเซเช
# "id_echo.h" เชจเซ เชธเชฎเชพเชตเซเชถ เชเชฐเซ
เชชเซเชฐเซเชฃเชพเชเช
เชฎเซเชเซเชฏ (int argc, char *argv[])
{
int sfd, j;
เชฎเชพเชช_เชเซ เชฒเซเชจ;
size_t numRead;
char buf[BUF_SIZE];
เชเซ (argc < 2 || strcmp(argv[1], "--help") == 0)
usageErr("%s เชนเซเชธเซเช msgโฆn", argv[0]);
/* เชชเซเชฐเชฅเชฎ เชเชฆเซเชถ เชตเชพเชเซเชฏ เชฆเชฒเซเชฒเชจเชพ เชเชงเชพเชฐเซ เชธเชฐเซเชตเชฐ เชธเชฐเชจเชพเชฎเซเช เชฌเชจเชพเชตเซ */
sfd = inetConnect(argv[1], SERVICE, SOCK_DGRAM);
เชเซ (sfd == -1)
เชเซเชตเชฒเซเชฃ ("เชธเชฐเซเชตเชฐ เชธเซเชเซเช เชธเชพเชฅเซ เชเชจเซเชเซเช เชเชฐเซ เชถเชเชพเชฏเซเช เชจเชฅเซ");
/* เชฌเชพเชเซเชจเซ เชฆเชฒเซเชฒเซ เชธเชฐเซเชตเชฐเชจเซ เช
เชฒเช เชกเซเชเชพเชเซเชฐเชพเชฎเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชฎเซเชเชฒเซ */
เชฎเชพเชเซ (j = 2; j < argc; j++) {
len = strlen(argv[j]);
เชเซ (เชฒเชเซ(sfd, argv[j], len) != len)
เชเซเชตเชฒเซเชฃ ("เชเชเชถเชฟเช/เชจเชฟเชทเซเชซเชณ เชฒเซเชเชจ");
numRead = เชตเชพเชเชเซ(sfd, buf, BUF_SIZE);
เชเซ (เชธเชเชเซเชฏเชพ เชตเชพเชเชเซ == -1)
errExit("เชตเชพเชเชเซ");
printf("[%ld เชฌเชพเชเชเซเชธ] %.*sn", (เชฒเชพเชเชฌเซ) numRead, (int) numRead, buf);
}
เชฌเชนเชพเชฐ เชจเซเชเชณเซ(EXIT_SUCCESS);
}
_____________________________________________________________________ sockets/id_echo_cl.c
เชธเชฐเซเชตเชฐ เชเชฒเชพเชตเชคเซ เชตเชเชคเซ เชเชชเชฃเซ เชถเซเช เชเซเชถเซเช เช เชจเซ เชฌเซ เชเซเชฒเชพเชฏเชจเซเช เชเชฆเชพเชนเชฐเชฃเซ เชจเซเชเซ เชเชชเซเชฒ เชเซ:
เชเชฐเชเซเชทเชฟเชค เชชเซเชฐเซเช เชธเชพเชฅเซ เชเซเชกเชพเชตเชพ เชฎเชพเชเซ $su // เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซ เชเชฐเซเชฐเซ เชเซ
เชชเชพเชธเชตเชฐเซเชก:
# ./id_echo_sv // เชธเชฐเซเชตเชฐ เชชเซเชทเซเช เชญเซเชฎเชฟ เชฎเซเชกเชฎเชพเช เชเชพเชฏ เชเซ
# เชฌเชนเชพเชฐ เชจเซเชเชณเซ // เชเชกเชฎเชฟเชจเชฟเชธเซเชเซเชฐเซเชเชฐ เช
เชงเชฟเชเชพเชฐเซ เชเซเชกเซ เชฆเซ
$ ./id_echo_cl localhost hello world // เช เชเซเชฒเชพเชฏเชจเซเช เชฌเซ เชกเซเชเชพเชเซเชฐเชพเชฎ เชฎเซเชเชฒเซ เชเซ
[5 เชฌเชพเชเชเซเชธ] เชนเซเชฒเซ // เชเซเชฒเชพเชฏเชเช เชธเชฐเซเชตเชฐ เชคเชฐเชซเชฅเซ เชชเซเชฐเชพเชชเซเชค เชชเซเชฐเชคเชฟเชธเชพเชฆ เชฆเชฐเซเชถเชพเชตเซ เชเซ
[5 เชฌเชพเชเชเซเชธ] เชตเชฟเชถเซเชต
$ ./id_echo_cl เชฒเซเชเชฒเชนเซเชธเซเช เชเซเชกเชฌเชพเชฏ // เช เชเซเชฒเชพเชฏเชเช เชเช เชกเซเชเชพเชเซเชฐเชพเชฎ เชฎเซเชเชฒเซ เชเซ
[7 เชฌเชพเชเชเซเชธ] เชเซเชกเชฌเชพเชฏ
เชนเซเช เชคเชฎเชจเซ เชเชจเชเชฆเชฆเชพเชฏเช เชตเชพเชเชเชจเชจเซ เชเชเซเชเชพ เชเชฐเซเช เชเซเช)
เชธเซเชฐเซเชธ: linux.org.ru