เดชเตเดธเตเดคเด•เด‚ "เดฒเดฟเดจเด•เตเดธเต API. เดธเดฎเด—เตเดฐ เด—เตˆเดกเต"


เดชเตเดธเตเดคเด•เด‚ "เดฒเดฟเดจเด•เตเดธเต API. เดธเดฎเด—เตเดฐ เด—เตˆเดกเต"

เด—เตเดกเต เด†เดซเตเดฑเตเดฑเตผเดจเต‚เตบ "เดฒเดฟเดจเด•เตเดธเต เดŽเดชเดฟเด" เดŽเดจเตเดจ เดชเตเดธเตเดคเด•เด‚ เดžเดพเตป เดจเดฟเด™เตเด™เดณเตเดŸเต† เดถเตเดฐเดฆเตเดงเดฏเดฟเตฝเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต. เดธเดฎเด—เตเดฐเดฎเดพเดฏ เด’เดฐเต เด—เตˆเดกเต" (เดชเตเดธเตเดคเด•เดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดฒเดฟเดจเด•เตเดธเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เด‡เดจเตเดฑเตผเดซเต‡เดธเต). เดชเตเดฐเดธเดพเดงเด•เดจเตเดฑเต† เดตเต†เดฌเตโ€Œเดธเตˆเดฑเตเดฑเดฟเดฒเตเด‚ เดจเดฟเด™เตเด™เตพ เดชเตเดฐเตŠเดฎเต‹เดทเดฃเตฝ เด•เต‹เดกเต เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เด…เดคเต เด“เตผเดกเตผ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจเดคเดพเดฃเต LinuxAPI , เดจเดฟเด™เตเด™เตพเด•เตเด•เต 30% เด•เดฟเดดเดฟเดตเต เดฒเดญเดฟเด•เตเด•เตเด‚.

เดฑเดซเดฑเตปเดธเดฟเดจเดพเดฏเดฟ เดชเตเดธเตเดคเด•เดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด‰เดฆเตเดงเดฐเดฃเดฟ:

เดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพ: เดธเต†เตผเดตเตผ เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเตผ

เดˆ เด…เดงเตเดฏเดพเดฏเดคเตเดคเดฟเตฝ, เด†เดตเตผเดคเตเดคเดจเดชเดฐเดตเตเด‚ เดธเดฎเดพเดจเตเดคเดฐเดตเตเดฎเดพเดฏ เดธเต†เตผเดตเดฑเตเด•เตพ เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเด•เดพเดฐเตเดฏเด™เตเด™เตพ เดžเด™เตเด™เตพ เดšเตผเดšเตเดš เดšเต†เดฏเตเดฏเตเด‚, เด•เต‚เดŸเดพเดคเต† เด‡เตปเดฑเตผเดจเต†เดฑเตเดฑเต เดธเต†เตผเดตเตผ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดจเตเดจ inetd เดŽเดจเตเดจ เดชเตเดฐเดคเตเดฏเต‡เด• เดกเต†เดฎเดฃเตเด‚ เดจเต‹เด•เตเด•เดพเด‚.

เด†เดตเตผเดคเตเดคเดจเดชเดฐเดตเตเด‚ เดธเดฎเดพเดจเตเดคเดฐเดตเตเดฎเดพเดฏ เดธเต†เตผเดตเดฑเตเด•เตพ

เดฐเดฃเตเดŸเต เดธเดพเดงเดพเดฐเดฃ เดธเต‹เด•เตเด•เดฑเตเดฑเต เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดธเต†เตผเดตเตผ เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเตเด•เตพ เด‰เดฃเตเดŸเต:

  • เด†เดตเตผเดคเตเดคเดจเด‚: เดธเต†เตผเดตเตผ เด’เดฐเต เดธเดฎเดฏเด‚ เด•เตเดฒเดฏเดจเตเดฑเตเด•เตพเด•เตเด•เต เดธเต‡เดตเดจเด‚ เดจเตฝเด•เตเดจเตเดจเต, เด†เดฆเตเดฏเด‚ เด’เดฐเต เด•เตเดฒเดฏเดจเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ) เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดคเตเดŸเตผเดจเตเดจเต เด…เดŸเตเดคเตเดคเดคเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด™เตเด™เตเดจเตเดจเต;

  • เดธเดฎเดพเดจเตเดคเดฐเด‚: เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เด•เตเดฒเดฏเดจเตเดฑเตเด•เตพเด•เตเด•เต เด’เดฐเต‡เดธเดฎเดฏเด‚ เดธเต‡เดตเดจเด‚ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเดพเดฃเต เดธเต†เตผเดตเตผ เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต.

FIFO เด•เตเดฏเต‚เด•เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เด’เดฐเต เด†เดตเตผเดคเตเดคเดจ เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดธเต†เด•เตเดทเตป 44.8-เตฝ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต.

เด•เตเดฒเดฏเดจเตเดฑเต เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดตเดณเดฐเต† เดตเต‡เด—เดคเตเดคเดฟเตฝ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เด†เดตเตผเดคเตเดคเดจ เดธเต†เตผเดตเดฑเตเด•เตพ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเด•เต‚, เด•เดพเดฐเดฃเด‚ เด“เดฐเต‹ เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเตเด‚ เดฎเตเดจเตเดจเดฟเดฒเตเดณเตเดณ เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด•เตเดฒเดฏเดจเตเดฑเตเด•เตพเด•เตเด•เต เดธเต‡เดตเดจเด‚ เดจเตฝเด•เตเดจเตเดจเดคเตเดตเดฐเต† เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เดพเตป เดจเดฟเตผเดฌเดจเตเดงเดฟเดคเดฐเดพเด•เตเดจเตเดจเต. เด’เดฐเต เด•เตเดฒเดฏเดจเตเดฑเตเด‚ เดธเต†เตผเดตเดฑเตเด‚ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เด’เดฑเตเดฑ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เด•เตˆเดฎเดพเดฑเตเดฑเดฎเดพเดฃเต เดˆ เดธเดฎเต€เดชเดจเดคเตเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เด‰เดชเดฏเต‹เด— เด•เต‡เดธเต.

เด“เดฐเต‹ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเด‚ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เด—เดฃเตเดฏเดฎเดพเดฏ เดธเดฎเดฏเดฎเต†เดŸเตเด•เตเด•เตเดจเตเดจ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเดฒเต‹ เด•เตเดฒเดฏเดจเตเดฑเตเด‚ เดธเต†เตผเดตเดฑเตเด‚ เดฆเต€เตผเด˜เดฎเดพเดฏ เดธเดจเตเดฆเต‡เดถ เด•เตˆเดฎเดพเดฑเตเดฑเด™เตเด™เดณเดฟเตฝ เดเตผเดชเตเดชเต†เดŸเตเดจเตเดจ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดฒเต‹ เดธเดฎเดพเดจเตเดคเดฐ เดธเต†เตผเดตเดฑเตเด•เตพ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฃเต. เดˆ เด…เดงเตเดฏเดพเดฏเดคเตเดคเดฟเตฝ, เดธเดฎเดพเดจเตเดคเดฐ เดธเต†เตผเดตเดฑเตเด•เตพ เดฐเต‚เดชเด•เตฝเดชเดจ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเดฐเดฎเตเดชเดฐเดพเด—เดค (เดเดฑเตเดฑเดตเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ) เดฎเดพเตผเด—เดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด‚ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเด•เตเด•เตเด‚, เด…เดคเดพเดฏเดคเต เด“เดฐเต‹ เดชเตเดคเดฟเดฏ เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเตเด‚ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดšเตˆเตฝเดกเต เดชเตเดฐเต‹เดธเดธเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต. เดˆ เดชเตเดฐเด•เตเดฐเดฟเดฏ เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเต† เดธเต‡เดตเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดจเดฟเตผเดตเดนเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดคเตเดŸเตผเดจเตเดจเต เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดˆ เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เตพ เด“เดฐเต‹เดจเตเดจเตเด‚ เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เด•เตเดฒเดฏเดจเตเดฑเตเด•เดณเต† เด’เดฐเต‡เดธเดฎเดฏเด‚ เดธเต‡เดตเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเดฃเต. เดชเตเดฐเดงเดพเดจ เดธเต†เตผเดตเตผ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเดŸเต† (เดฐเด•เตเดทเดพเด•เตผเดคเตƒ) เดชเตเดฐเดงเดพเดจ เดฆเตŒเดคเตเดฏเด‚ เด“เดฐเต‹ เดชเตเดคเดฟเดฏ เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเตเด‚ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด•เตเดŸเตเดŸเดฟเดฏเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต (เดชเด•เดฐเด‚, เดชเตเดฐเต‹เดธเดธเตเดธเตเด•เตพเด•เตเด•เต เดชเด•เดฐเด‚ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดทเตป เดคเตเดฐเต†เดกเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚).

เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดตเดฟเดญเดพเด—เด™เตเด™เดณเดฟเตฝ, เด†เดตเตผเดคเตเดคเดจเดชเดฐเดตเตเด‚ เดธเดฎเดพเดจเตเดคเดฐเดตเตเดฎเดพเดฏ เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเต เดกเตŠเดฎเต†เดฏเตเตป เดธเต‹เด•เตเด•เดฑเตเดฑเต เดธเต†เตผเดตเดฑเตเด•เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดžเด™เตเด™เตพ เดจเต‹เด•เตเด•เตเด‚. เดˆ เดฐเดฃเตเดŸเต เดธเต†เตผเดตเดฑเตเด•เดณเตเด‚ เดŽเด•เตเด•เต‹ เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเดฑเต† (RFC 862) เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเดคเดฟเดชเตเดชเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เด’เดฐเต เด•เตเดฒเดฏเดจเตเดฑเต เด…เดฏเดšเตเดš เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดชเด•เตผเดชเตเดชเต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจเต.

เด†เดตเตผเดคเตเดคเดจ UDP เดธเต†เตผเดตเตผ เดŽเด•เตเด•เต‹

เด‡เดคเดฟเดฒเตเด‚ เด…เดŸเตเดคเตเดค เดตเดฟเดญเดพเด—เดคเตเดคเดฟเดฒเตเด‚ เดžเด™เตเด™เตพ เดŽเด•เตเด•เต‹ เดธเต‡เดตเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เดธเต†เตผเดตเดฑเตเด•เตพ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚. เด‡เดคเต เดชเต‹เตผเดŸเตเดŸเต เดจเดฎเตเดชเตผ 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 /* เดกเดพเดฑเตเดฑเดพเด—เตเดฐเดพเดฎเตเด•เดณเตเดŸเต† เดชเดฐเดฎเดพเดตเดงเดฟ เดตเดฒเตเดชเตเดชเด‚
เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเตเด‚ เดธเต†เตผเดตเดฑเดฟเดจเตเด‚ เดตเดพเดฏเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ */
_____________________________________________________________________________________________________________________________________________

เดฒเดฟเดธเตเดฑเตเดฑเดฟเด‚เด—เต 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
เดชเตเดฐเดงเดพเดจ(int argc, char *argv[])
{
int sfd;
ssize_t numRead;
เดธเต‹เด•เตเด•เตเดฒเต†เตป_เดŸเดฟ เดฒเต†เตป;
เดธเตเดŸเตเดฐเด•เตเดฑเตเดฑเต sockaddr_storage claddr;
เดšเดพเตผ เดฌเดซเต[BUF_SIZE];
char addrStr[IS_ADDR_STR_LEN];

เดŽเด™เตเด•เดฟเตฝ (เดกเต‡เดฎเตป (0) == -1)
errExit("becomeDaemon");

sfd = inetBind(SERVICE, SOCK_DGRAM, NULL);
เดŽเด™เตเด•เดฟเตฝ (sfd == -1) {
syslog(LOG_ERR, "เดธเต†เตผเดตเตผ เดธเต‹เด•เตเด•เดฑเตเดฑเต (%s) เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ",
strerror (errno));
เดชเตเดฑเดคเตเดคเตเด•เดŸเด•เตเด•เตเด• (EXIT_FAILURE);

/* เดกเดพเดฑเตเดฑเดพเด—เตเดฐเดพเดฎเตเด•เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดตเดฏเตเดŸเต† เดชเด•เตผเดชเตเดชเตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเดตเตผเด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด• */
}
เดตเต‡เดฃเตเดŸเดฟ (;;) {
เดฒเต†เตป = sizeof(sckaddr_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((เดธเตโ€ŒเดŸเตเดฐเด•เตโ€Œเดฑเตเดฑเต เดธเต‹เด•เตเด•เดพเดกเตโ€Œเด†เตผ *) &เด•เตเดฒเดพเดกเตโ€Œเดกเตผ, เดฒเต†เตป,
addrStr, IS_ADDR_STR_LEN),
strerror (errno));
}
}
_________________________________________________________________ เดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพ/id_echo_sv.c

เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดฒเดฟเดธเตเดฑเตเดฑเดฟเด‚เด—เต 56.3-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดธเต†เด•เตเดทเตป 55.12-เตฝ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดš เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเต เดกเตŠเดฎเต†เดฏเตเตป เดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด‡เดคเต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด†เดฆเตเดฏเดคเตเดคเต† เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเต เดŽเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ, เด•เตเดฒเดฏเดจเตเดฑเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดธเต†เตผเดตเตผ เดธเตเดฅเดฟเดคเดฟเดšเต†เดฏเตเดฏเตเดจเตเดจ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดจเต‹เดกเดฟเดจเตเดฑเต† เดชเต‡เดฐเต เดŽเดŸเตเด•เตเด•เตเดจเตเดจเต. เด•เตเดฒเดฏเดจเตเดฑเต เด’เดฐเต เดฒเต‚เดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเดตเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดตเดฟเดŸเต† เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจ เด“เดฐเต‹ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เดณเตเด‚ เดชเตเดฐเดคเตเดฏเต‡เด• เดกเดพเดฑเตเดฑเดพเด—เตเดฐเดพเดฎเตเด•เดณเดพเดฏเดฟ เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต, เดคเตเดŸเตผเดจเตเดจเต เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจ เดกเดพเดฑเตเดฑเดพเด—เตเดฐเดพเดฎเตเด•เตพ เดชเตเดฐเดคเดฟเด•เดฐเดฃเดฎเดพเดฏเดฟ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเตเดฐเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดชเดŸเตเดŸเดฟเด• 56.3. UDP เดŽเด•เตเด•เต‹ เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเดณเตเดณ เด•เตเดฒเดฏเดจเตเดฑเต

#"id_echo.h" เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•

int
เดชเตเดฐเดงเดพเดจ(int argc, char *argv[])
{
int sfd, j;
เดตเดฒเดฟเดชเตเดชเด‚_เดŸเดฟ เดฒเต†เตป;
ssize_t numRead;
เดšเดพเตผ เดฌเดซเต[BUF_SIZE];

เดŽเด™เตเด•เดฟเตฝ (argc < 2 || strcmp(argv[1], "--help") == 0)
UseErr("%s เดนเต‹เดธเตเดฑเตเดฑเต msg...n", argv[0]);

/* เด†เดฆเตเดฏเดคเตเดคเต† เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเดฟเดจเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดธเต†เตผเดตเตผ เดตเดฟเดฒเดพเดธเด‚ เดฐเต‚เดชเดชเตเดชเต†เดŸเตเดคเตเดคเตเด• */
sfd = inetConnect(argv[1], SERVICE, SOCK_DGRAM);
เดŽเด™เตเด•เดฟเตฝ (sfd == -1)
เดฎเดพเดฐเด•เดฎเดพเดฏ ("เดธเต†เตผเดตเตผ เดธเต‹เด•เตเด•เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ");

/* เดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เตพ เดชเตเดฐเดคเตเดฏเต‡เด• เดกเดพเดฑเตเดฑเดพเด—เตเดฐเดพเดฎเตเด•เดณเตเดŸเต† เดฐเต‚เดชเดคเตเดคเดฟเตฝ เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเด• */
เดตเต‡เดฃเตเดŸเดฟ (j = 2; j < argc; j++) {
เดฒเต†เตป = strlen (argv[j]);
เดŽเด™เตเด•เดฟเตฝ (เดŽเดดเตเดคเตเด•(sfd, argv[j], len) != len)
เดฎเดพเดฐเด•เดฎเดพเดฏ ("เดญเดพเด—เดฟเด•/เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเดŸ เดŽเดดเตเดคเตเดคเต");

numRead = เดฑเต€เดกเต (sfd, buf, BUF_SIZE);
เดŽเด™เตเด•เดฟเตฝ (เดŽเดฃเตเดฃเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด• == -1)
errExit ("เดตเดพเดฏเดฟเด•เตเด•เตเด•");
printf("[%ld bytes] %.*sn", (เดจเต€เดฃเตเดŸ) numRead, (int) numRead, buf);
}
เดชเตเดฑเดคเตเดคเตเด•เดŸเด•เตเด•เตเด• (EXIT_SUCCESS);
}
_________________________________________________________________ เดธเต‹เด•เตเด•เดฑเตเดฑเตเด•เตพ/id_echo_cl.c

เดธเต†เตผเดตเตผ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฎเตเดฎเตพ เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเดตเตเด‚ เดฐเดฃเตเดŸเต เด•เตเดฒเดฏเดจเตเดฑเต เดธเด‚เดญเดตเด™เตเด™เดณเตเด‚ เดšเตเดตเดŸเต†เดฏเตเดฃเตเดŸเต:

$su // เด’เดฐเต เดฑเดฟเดธเตผเดตเตเดกเต เดชเต‹เตผเดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดชเตเดฐเดคเตเดฏเต‡เด•เดพเดตเด•เดพเดถเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต
เดฐเดนเดธเตเดฏเดตเดพเด•เตเด•เต:
# ./id_echo_sv // เดธเต†เตผเดตเตผ เดชเดถเตเดšเดพเดคเตเดคเดฒ เดฎเต‹เดกเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเดจเตเดจเต
# เดชเตเดฑเดคเตเดคเตเด•เดŸเด•เตเด•เตเด• // เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเตผ เด…เดตเด•เดพเดถเด™เตเด™เตพ เด‰เดชเต‡เด•เตเดทเดฟเด•เตเด•เตเด•
$ ./id_echo_cl เดฒเต‹เด•เตเด•เตฝเดนเต‹เดธเตเดฑเตเดฑเต เดนเดฒเต‹ เดตเต‡เตพเดกเต // เดˆ เด•เตเดฒเดฏเดจเตเดฑเต เดฐเดฃเตเดŸเต เดกเดพเดฑเตเดฑเดพเด—เตเดฐเดพเดฎเตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต
[5 เดฌเตˆเดฑเตเดฑเตเด•เตพ] เดนเดฒเต‹ // เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเดฟเดšเตเดš เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เด•เตเดฒเดฏเดจเตเดฑเต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต
[5 เดฌเตˆเดฑเตเดฑเตเด•เตพ] เดฒเต‹เด•เด‚
$ ./id_echo_cl เดฒเต‹เด•เตเด•เตฝเดนเต‹เดธเตเดฑเตเดฑเต เดตเดฟเดŸ // เดˆ เด•เตเดฒเดฏเดจเตเดฑเต เด’เดฐเต เดกเดพเดฑเตเดฑเด—เตเดฐเดพเด‚ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต
[7 เดฌเตˆเดฑเตเดฑเตเด•เตพ] เดตเดฟเดŸ

เดžเดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเดฒเตเดฒ เดตเดพเดฏเดจ เด†เดถเด‚เดธเดฟเด•เตเด•เตเดจเตเดจเต)

เด…เดตเดฒเด‚เดฌเด‚: linux.org.ru