เจฌเฉเฉฑเจ• "เจฒเฉ€เจจเจ•เจธ API. เจตเจฟเจ†เจชเจ• เจ—เจพเจˆเจก"


เจฌเฉเฉฑเจ• "เจฒเฉ€เจจเจ•เจธ API. เจตเจฟเจ†เจชเจ• เจ—เจพเจˆเจก"

เจจเจฎเจธเจ•เจพเจฐ เจฎเฉˆเจ‚ เจคเฉเจนเจพเจกเฉ‡ เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš "เจฒเฉ€เจจเจ•เจธ API" เจ•เจฟเจคเจพเจฌ เจชเฉ‡เจธเจผ เจ•เจฐเจฆเจพ เจนเจพเจ‚เฅค เจ‡เฉฑเจ• เจตเจฟเจ†เจชเจ• เจ—เจพเจˆเจก" (เจ•เจฟเจคเจพเจฌ เจฆเจพ เจ…เจจเฉเจตเจพเจฆ เจฒเฉ€เจจเจ•เจธ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ). เจ‡เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจ• เจฆเฉ€ เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ 'เจคเฉ‡ เจ†เจฐเจกเจฐ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจชเฉเจฐเจšเจพเจฐ เจ•เฉ‹เจก เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹ 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 /* เจกเฉ‡เจŸเจพเจ—เฉเจฐเจพเจฎ เจฆเจพ เจ…เจงเจฟเจ•เจคเจฎ เจ†เจ•เจพเจฐ เจœเฉ‹
เจ•เจฒเจพเจ‡เฉฐเจŸ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ เจฆเฉเจ†เจฐเจพ เจชเฉœเฉเจนเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ */
_____________________________________________________________________ เจธเจพเจ•เจŸ/id_echo.h

เจธเฉ‚เจšเฉ€ 56.2 เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจจเฉเจ•เจคเฉ‡ เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเจจ:

  • เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจกเฉˆเจฎเจจ เจฎเฉ‹เจก เจตเจฟเฉฑเจš เจชเจพเจ‰เจฃ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจธเฉˆเจ•เจธเจผเจจ 37.2 เจคเฉ‹เจ‚ becomeDaemon() เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚;

  • เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจธเฉฐเจ–เฉ‡เจช เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจธเฉˆเจ•เจธเจผเจจ 55.12 เจตเจฟเฉฑเจš เจตเจฟเจ•เจธเจค, เจ‡เฉฐเจŸเจฐเจจเฉˆเจŸ เจกเฉ‹เจฎเฉ‡เจจ เจธเจพเจ•เจŸเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚;

  • เจœเฉ‡เจ•เจฐ เจธเจฐเจตเจฐ เจ•เจฒเจพเจ‡เฉฐเจŸ เจจเฉ‚เฉฐ เจœเจตเจพเจฌ เจจเจนเฉ€เจ‚ เจฆเฉ‡ เจธเจ•เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจน syslog() เจ•เจพเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฒเจพเจ— เจจเฉ‚เฉฐ เจธเฉเจจเฉ‡เจนเจพ เจฒเจฟเจ–เจฆเจพ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจ…เจธเจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจธเฉฐเจญเจพเจตเจค เจคเฉŒเจฐ 'เจคเฉ‡ syslog() เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉŒเจ— เจ•เจฐเจจ เจฆเฉ€ เจฌเจพเจฐเฉฐเจฌเจพเจฐเจคเจพ 'เจคเฉ‡ เจ•เฉเจ เจธเฉ€เจฎเจพ เจฒเจ—เจพเจตเจพเจ‚เจ—เฉ‡เฅค เจ‡เจน เจธเจฟเจธเจŸเจฎ เจฒเฉŒเจ— เจจเฉ‚เฉฐ เจ“เจตเจฐเจซเจฒเฉ‹ เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจนเจฎเจฒเจพเจตเจฐ เจฆเฉ€ เจธเฉฐเจญเจพเจตเจจเจพ เจจเฉ‚เฉฐ เจ–เจคเจฎ เจ•เจฐ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เจน เจจเจพ เจญเฉเฉฑเจฒเฉ‹ เจ•เจฟ syslog() เจฒเจˆ เจนเจฐเฉ‡เจ• เจ•เจพเจฒ เจ•เจพเจซเจผเฉ€ เจฎเจนเจฟเฉฐเจ—เฉ€ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน fsync() เจจเฉ‚เฉฐ เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจตเจฐเจคเจฆเจพ เจนเฉˆเฅค

เจธเฉ‚เจšเฉ€ 56.2. เจฆเฉเจนเจฐเจพเจ“ เจธเจฐเจตเจฐ เจœเฉ‹ UDP เจˆเจ•เฉ‹ เจธเฉ‡เจตเจพ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ

_____________________________________________________________________ เจธเจพเจ•เจŸ/id_echo_sv.c
#เจธเจผเจพเจฎเจฒ
# "id_echo.h" เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹
# "become_daemon.h" เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

เจ‡เฉฐเจŸ
เจฎเฉเฉฑเจ– (int argc, char *argv[])
{
int sfd;
ssize_t numRead;
socklen_t len;
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);

เจœเฉ‡เจ•เจฐ (numRead == -1)
errExit("recvfrom");
if (sendto(sfd, buf, numRead, 0, (struct sockaddr *) &claddr, len)
!= numRead)
syslog(LOG_WARNING, "%s (%s) เจฆเฉ‡ เจœเจตเจพเจฌ เจจเฉ‚เฉฐ เจ—เฉ‚เฉฐเจœเจฃ เจตเจฟเฉฑเจš เจ—เจฒเจคเฉ€",
inetAddressStr((struct sockaddr*) &claddr, len,
addrStr, IS_ADDR_STR_LEN),
strerror(errno));
}
}
_____________________________________________________________________ เจธเจพเจ•เจŸ/id_echo_sv.c

เจธเจฐเจตเจฐ เจฆเฉ€ เจ•เจพเจฐเจตเจพเจˆ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจธเฉ‚เจšเฉ€ 56.3 เจคเฉ‹เจ‚ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจ‡เจน เจธเฉˆเจ•เจธเจผเจจ 55.12 เจตเจฟเฉฑเจš เจตเจฟเจ•เจธเจค, เจ‡เฉฐเจŸเจฐเจจเฉˆเจŸ เจกเฉ‹เจฎเฉ‡เจจ เจธเจพเจ•เจŸเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจตเฉ€ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจชเจนเจฟเจฒเฉ€ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจตเจœเฉ‹เจ‚, เจ•เจฒเจพเจ‡เฉฐเจŸ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจ‰เจธ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจจเฉ‹เจก เจฆเจพ เจจเจพเจฎ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆ เจœเจฟเจธ 'เจคเฉ‡ เจธเจฐเจตเจฐ เจธเจฅเจฟเจค เจนเฉˆเฅค เจ•เจฒเจพเจ‡เฉฐเจŸ เจ‡เฉฑเจ• เจฒเฉ‚เจช เจตเจฟเฉฑเจš เจฆเจพเจ–เจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเจฟเฉฑเจฅเฉ‡ เจ‡เจน เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจตเฉฑเจ–เจฐเฉ‡ เจกเฉ‡เจŸเจพเจ—เฉเจฐเจพเจฎเจพเจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฌเจพเจ•เฉ€ เจฌเจšเฉ‡ เจนเจฐเฉ‡เจ• เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจซเจฟเจฐ เจœเจตเจพเจฌ เจตเจฟเฉฑเจš เจธเจฐเจตเจฐ เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพเจ—เฉเจฐเจพเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจฆเจพ เจ…เจคเฉ‡ เจชเฉเจฐเจฟเฉฐเจŸ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจธเฉ‚เจšเฉ€ 56.3. UDP เจˆเจ•เฉ‹ เจธเฉ‡เจตเจพ เจฒเจˆ เจ•เจฒเจพเจ‡เฉฐเจŸ

# "id_echo.h" เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

เจ‡เฉฐเจŸ
เจฎเฉเฉฑเจ– (int argc, char *argv[])
{
int sfd, j;
เจ†เจ•เจพเจฐ_เจŸเฉ€ เจฒเฉˆเจจ;
ssize_t numRead;
char buf[BUF_SIZE];

เจœเฉ‡เจ•เจฐ (argc < 2 || strcmp(argv[1], "--help") == 0)
usageErr("%s host 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);
เจœเฉ‡เจ•เจฐ (numRead == -1)
errExit("เจชเฉœเฉเจนเฉ‹");
printf("[%ld เจฌเจพเจˆเจŸเจธ] %.*sn", (long) numRead, (int) numRead, buf);
}
เจจเจฟเจ•เจพเจธ (EXIT_SUCCESS);
}
_____________________________________________________________________ เจธเจพเจ•เจŸ/id_echo_cl.c

เจนเฉ‡เจ เจพเจ‚ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจนเฉˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจธเจฐเจตเจฐ เจ…เจคเฉ‡ เจฆเฉ‹ เจ•เจฒเจพเจ‡เฉฐเจŸ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจ•เฉ€ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡:

$su // เจฐเจฟเจœเจผเจฐเจตเจก เจชเฉ‹เจฐเจŸ เจจเจพเจฒ เจœเฉ‹เฉœเจจ เจฒเจˆ เจตเจฟเจธเจผเฉ‡เจธเจผ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ
เจชเจพเจธเจตเจฐเจก:
# ./id_echo_sv // เจธเจฐเจตเจฐ เจฌเฉˆเจ•เจ—เฉเจฐเจพเจ‰เจ‚เจก เจฎเฉ‹เจก เจตเจฟเฉฑเจš เจœเจพเจ‚เจฆเจพ เจนเฉˆ
# เจฌเจพเจนเจฐ เจจเจฟเจ•เจฒเฉ‹ // เจชเฉเจฐเจธเจผเจพเจธเจ• เจฆเฉ‡ เจ…เจงเจฟเจ•เจพเจฐ เจ›เฉฑเจกเฉ‹
$ ./id_echo_cl localhost hello world // เจ‡เจน เจ•เจฒเจพเจ‡เฉฐเจŸ เจฆเฉ‹ เจกเจพเจŸเจพเจ—เฉเจฐเจพเจฎ เจญเฉ‡เจœเจฆเจพ เจนเฉˆ
[5 เจฌเจพเจˆเจŸเจธ] เจนเฉˆเจฒเฉ‹ // เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฐเจตเจฐ เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจœเจตเจพเจฌ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ
[5 เจฌเจพเจˆเจŸ] เจธเฉฐเจธเจพเจฐ
$ ./id_echo_cl เจฒเฉ‹เจ•เจฒเจนเฉ‹เจธเจŸ เจ…เจฒเจตเจฟเจฆเจพ // เจ‡เจน เจ•เจฒเจพเจ‡เฉฐเจŸ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจ—เฉเจฐเจพเจฎ เจญเฉ‡เจœเจฆเจพ เจนเฉˆ
[7 เจฌเจพเจˆเจŸเจธ] เจ…เจฒเจตเจฟเจฆเจพ

เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจธเฉเจนเจพเจตเจฃเจพ เจชเฉœเฉเจนเจจ เจฆเฉ€ เจ•เจพเจฎเจจเจพ เจ•เจฐเจฆเจพ เจนเจพเจ‚)

เจธเจฐเฉ‹เจค: linux.org.ru