"Linux API" เชฌเซเช• เช•เชฐเซ‹. เชตเซเชฏเชพเชชเช• เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ"


"Linux API" เชฌเซเช• เช•เชฐเซ‹. เชตเซเชฏเชพเชชเช• เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ"

เชถเซเชญ เชฌเชชเซ‹เชฐ เชนเซเช‚ เชคเชฎเชพเชฐเชพ เชงเซเชฏเชพเชจ เชชเชฐ เชชเซเชธเซเชคเช• โ€œ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