αžŸαŸ€αžœαž—αŸ… β€œLinux API. αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŠαŸαž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™"


αžŸαŸ€αžœαž—αŸ… β€œLinux API. αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŠαŸαž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™"

αž’αžšαž»αžŽαžŸαž½αžŸαŸ’αžαžΈ αžαŸ’αž‰αž»αŸ†αž’αŸ’αžœαžΎαž”αž‘αž”αž„αŸ’αž αžΆαž‰αžŠαž›αŸ‹αž€αžΆαžšαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αžΌαžœαžŸαŸ€αžœαž—αŸ… β€œLinux API. αž˜αž‚αŸ’αž‚αž»αž‘αŸ’αž‘αŸαžŸαž€αŸαžŠαŸαž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™β€ (αž€αžΆαžšαž”αž€αž”αŸ’αžšαŸ‚αžŸαŸ€αžœαž—αŸ… αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž›αžΈαž“αž»αž…) αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž“αŸ…αž›αžΎαž‚αŸαž αž‘αŸ†αž–αŸαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™ αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž’αž“αž»αžœαžαŸ’αžαž›αŸαžαž€αžΌαžŠαž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™ LinuxAPI αž’αŸ’αž“αž€αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž”αž‰αŸ’αž…αž»αŸ‡αžαž˜αŸ’αž›αŸƒ 30% αŸ”

αžŠαž€αžŸαŸ’αžšαž„αŸ‹αž…αŸαž‰αž–αžΈαžŸαŸ€αžœαž—αŸ…αž‡αžΆαž―αž€αžŸαžΆαžšαž™αŸ„αž„αŸ–

αžšαž“αŸ’αž’αŸ– αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ

αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž–αžΌαž€αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαžšαž…αž“αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαžŠαŸ‚αž›αŸ— αž“αž·αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž› αž αžΎαž™αž€αŸαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŠαŸαž˜αž·αž“αž–αž·αžŸαŸαžŸαž˜αž½αž™αž αŸ…αžαžΆ inetd αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαŸ”

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαžŠαŸ‚αž›αŸ— αž“αž·αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›

αž˜αžΆαž“αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αžŽαŸ’αžαžΆαž‰αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎαžšαž“αŸ’αž’αž’αž˜αŸ’αž˜αžαžΆαž–αžΈαžšαŸ–

  • αžŠαžŠαŸ‚αž›αŸ—αŸ– αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αž˜αŸ’αžšαžΎαž’αžαž·αžαž·αž‡αž“αž˜αŸ’αžαž„αž˜αž½αž™αŸ— αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ†αžŽαžΎαžšαž˜αž½αž™ (αž¬αžŸαŸ†αžŽαžΎαž‡αžΆαž…αŸ’αžšαžΎαž“) αž–αžΈαž’αžαž·αžαž·αž‡αž“αž˜αž½αž™αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αž“αŸ’αžαž‘αŸ…αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

  • αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αŸ– αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αž˜αŸ’αžšαžΎαž’αžαž·αžαž·αž‡αž“αž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαŸ”

αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎαž‡αž½αžš FIFO αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžšαž½αž…αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 44.8 αŸ”

αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαžŠαŸ‚αž›αŸ—αž‚αžΊαžŸαž˜αžšαž˜αŸ’αž™αžαŸ‚αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ‚αž›αžŸαŸ†αžŽαžΎαžšαž”αžŸαŸ‹αž’αžαž·αžαž·αž‡αž“αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αž›αžΏαž“αžŠαŸ„αž™αž™αž»αžαŸ’αžαž·αž’αž˜αŸŒ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž’αžαž·αžαž·αž‡αž“αž“αžΈαž˜αž½αž™αŸ—αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αžαŸ†αž±αŸ’αž™αžšαž„αŸ‹αž…αžΆαŸ†αžšαž αžΌαžαžŠαž›αŸ‹αž’αžαž·αžαž·αž‡αž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž–αžΈαž˜αž»αžαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž˜αŸ’αžšαžΎαŸ” αž€αžšαžŽαžΈαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αžΌαž‘αŸ…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž‚αžΊαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαŸ†αžŽαžΎ αž“αž·αž„αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžαŸ‚αž˜αž½αž™αžšαžœαžΆαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αž‚αžΊαžŸαž˜αžšαž˜αŸ’αž™αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αžŸαŸ†αžŽαžΎαž“αžΈαž˜αž½αž™αŸ—αžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αžœαŸαž›αžΆαž…αŸ’αžšαžΎαž“αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž¬αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαžΆαžšαžŠαŸαžœαŸ‚αž„αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž–αžΌαž€αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž•αŸ’αžαŸ„αžαž‡αžΆαž…αž˜αŸ’αž”αž„αž›αžΎαžœαž·αž’αžΈαž”αŸ’αžšαž–αŸƒαžŽαžΈ (αž“αž·αž„αžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αž) αž“αŸƒαž€αžΆαžšαžšαž…αž“αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž› αžŠαŸ‚αž›αž‡αžΆαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΌαž“αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαž·αžαž·αž‡αž“αžαŸ’αž˜αžΈαž“αžΈαž˜αž½αž™αŸ—αŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αž˜αŸ’αžšαžΎαž’αžαž·αžαž·αž‡αž“αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αž‰αŸ’αž…αž”αŸ‹αŸ” αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž―αž€αžšαžΆαž‡αŸ’αž™ αž’αžαž·αžαž·αž‡αž“αž‡αžΆαž…αŸ’αžšαžΎαž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž˜αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαŸ” αž—αžΆαžšαž€αž·αž…αŸ’αž…αž…αž˜αŸ’αž”αž„αž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ (មេ) αž‚αžΊαž”αž„αŸ’αž€αžΎαžαž€αžΌαž“αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαž·αžαž·αž‡αž“αžαŸ’αž˜αžΈαž“αžΈαž˜αž½αž™αŸ— (αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸ αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž›αžΆαž™αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš)αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž“αŸ’αž’αž’αŸŠαžΈαž“αž’αžΊαžŽαŸαžαžŠαŸ‚αž›αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŠαžŠαŸ‚αž›αŸ— αž“αž·αž„αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸαŸ‡αž’αž“αž»αžœαžαŸ’αžαž€αŸ†αžŽαŸ‚αžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸƒαžŸαŸαžœαžΆαž’αŸαž€αžΌ (RFC 862) αžŠαŸ‚αž›αžαŸ’αžšαž‘αž”αŸ‹αž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž“αŸƒαžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‰αžΎαž‘αŸ…αžœαžΆαžŠαŸ„αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαŸ”

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ UDP αžŠαžŠαŸ‚αž›αŸ—αž”αž“αŸ’αž‘αžš

αž“αŸ…αž€αŸ’αž“αž»αž„αž“αŸαŸ‡ αž“αž·αž„αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž™αžΎαž„αž“αžΉαž„αžŽαŸ‚αž“αžΆαŸ† servers αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸαžœαžΆαž’αŸαž€αžΌαŸ” αžœαžΆαž˜αžΆαž“αž“αŸ…αž›αžΎαž…αŸ’αžšαž€αž›αŸαž 7 αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž‘αžΆαŸ†αž„ UDP αž“αž·αž„ TCP (αž…αŸ’αžšαž€αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αŸαž€αžΌαžαŸ’αžšαžΌαžœαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž‡αžΆαž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„)αŸ”

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ UDP αž’αŸαž€αžΌαž”αž“αŸ’αžαž’αžΆαž“ datagrams αž“αž·αž„αž”αž‰αŸ’αž‡αžΌαž“αž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž–αž½αž€αžœαžΆαž‘αŸ…αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαŸ” αžŠαŸ„αž™αžŸαžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαžΆαžšαžαŸ‚αž˜αž½αž™αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™ αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αžŠαžŠαŸ‚αž›αŸ—αž“αžΉαž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αŸ” αž―αž€αžŸαžΆαžšαž”αž‹αž˜αž€αžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈ 56.1 αŸ”

αž€αžΆαžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈ ៑. αž―αž€αžŸαžΆαžšαž”αž‹αž˜αž€αžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ id_echo_sv.c αž“αž·αž„ id_echo_cl.c

#include "inet_sockets.h" /* αž”αŸ’αžšαž€αžΆαžŸαž˜αž»αžαž„αžΆαžšαž“αŸƒαžšαž“αŸ’αž’αžšαž”αžŸαŸ‹αž™αžΎαž„ */
# αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› "tlpi_hdr.h"

#αž€αŸ†αžŽαžαŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ "αž’αŸαž€αžΌ" /* αžˆαŸ’αž˜αŸ„αŸ‡αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ UDP */

#define BUF_SIZE 500 /* αž‘αŸ†αž αŸ†αž’αžαž·αž”αžšαž˜αžΆαž“αŸƒ datagrams αž“αŸ„αŸ‡αŸ”
αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αžŠαŸ„αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ */
_________________________________________________________________________________ sockets/id_echo.h

αž€αžΆαžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈ 56.2 αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž…αŸ†αžŽαž»αž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž‚αž½αžšαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αŸ–

  • αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΆαž€αŸ‹ server αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αžŠαŸαž˜αž·αž“ αž™αžΎαž„αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžš becomeDaemon() αž–αžΈαž•αŸ’αž“αŸ‚αž€ 37.2;

  • αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αžΆαž“αŸ‹αžαŸ‚αž”αž„αŸ’αžšαž½αž˜ αž™αžΎαž„αž”αŸ’αžšαžΎαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžšαž“αŸ’αž’αž’αŸŠαž·αž“αž’αžΊαžŽαž·αž αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ 55.12;

  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž˜αž·αž“αž’αžΆαž…αžαŸ’αžšαž‘αž”αŸ‹αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž‘αŸ αžœαžΆαžŸαžšαžŸαŸαžšαžŸαžΆαžšαž‘αŸ…αž€αžΆαž“αŸ‹αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž αŸ… syslog() αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž˜αž½αž™ αž™αžΎαž„αž‘αŸ†αž“αž„αž‡αžΆαž“αžΉαž„αžŠαžΆαž€αŸ‹αž€αž˜αŸ’αžšαž·αžαž˜αž½αž™αž…αŸ†αž“αž½αž“αž›αžΎαž—αžΆαž–αž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸƒαž€αžΆαžšαž€αžαŸ‹αžαŸ’αžšαžΆαžŸαžΆαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎ syslog()αŸ” αžœαžΆβ€‹αž“αžΉαž„β€‹αž›αž»αž”β€‹αž…αŸ„αž›β€‹αž›αž‘αŸ’αž’αž—αžΆαž–β€‹αžŠαŸ‚αž›β€‹αž’αŸ’αž“αž€β€‹αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšβ€‹αž αŸ€αžšβ€‹αž›αžΎβ€‹αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»β€‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž€αž»αŸ†αž—αŸ’αž›αŸαž…αžαžΆαžšαžΆαž›αŸ‹αž€αžΆαžšαž αŸ…αž‘αŸ…αž€αžΆαž“αŸ‹ syslog() αž‚αžΊαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒαžŽαžΆαžŸαŸ‹ αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž”αŸ’αžšαžΎ fsync() αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ”

αž€αžΆαžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈ ៑. αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αŸ’αžœαžΎαž‘αžΎαž„αžœαž·αž‰αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž’αŸαž€αžΌ UDP

__________________________________________________________________sockets/id_echo_sv.c
#include
# αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› "id_echo.h"
#αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› "become_daemon.h"

int
មេ (int argc, char *argv[])
{
int sfd;
ssize_t numRead;
socklen_t len;
αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ sockaddr_storage claddr;
char buf[BUF_SIZE];
char addrStr[IS_ADDR_STR_LEN];

αž”αŸ’αžšαžŸαž·αž“αž”αžΎ (αž€αŸ’αž›αžΆαž™αž‡αžΆDaemon(0) == -1)
errExit("becomeDaemon");

sfd = inetBind(αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜, SOCK_DGRAM, NULL);
αž”αŸ’αžšαžŸαž·αž“αž”αžΎ (sfd == -1) {
syslog(LOG_ERR, "αž˜αž·αž“αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžšαž“αŸ’αž’αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ (%s)",
strerror (errno));
αž…αŸαž‰(EXIT_FAILURE);

/* αž‘αž‘αž½αž› datagrams αž αžΎαž™αž”αž‰αŸ’αž‡αžΌαž“αž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αžšαž”αžŸαŸ‹αžœαžΆαž‘αŸ…αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαžœαž·αž‰*/
}
αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ (;;) {
len = sizeof(struct sockaddr_storage);
numRead = recvfrom(sfd, buf, BUF_SIZE, 0, (struct sockaddr *) &claddr, &len);

αž”αŸ’αžšαžŸαž·αž“αž”αžΎ (numRead == -1)
errExit("recvfrom");
αž”αŸ’αžšαžŸαž·αž“αž”αžΎ (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));
}
}
__________________________________________________________________sockets/id_echo_sv.c

αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžΆαž€αž›αŸ’αž”αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž™αžΎαž„αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αžΈ Listing 56.3αŸ” αžœαžΆαž€αŸαž”αŸ’αžšαžΎαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžšαž“αŸ’αž’αž’αŸŠαžΈαž“αž’αžΊαžŽαŸαž αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ 55.12αŸ” αž‡αžΆαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ†αž”αžΌαž„ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αžαž·αžαž·αž‡αž“αž™αž€αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ’αž“αžΆαŸ†αž„αž”αžŽαŸ’αžαžΆαž‰αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŸαŸ’αžαž·αžαž“αŸ…αŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž…αžΌαž›αž€αŸ’αž“αž»αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αžŠαŸ‚αž›αžœαžΆαž•αŸ’αž‰αžΎαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‡αžΆ datagrams αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αžΆαž“ αž“αž·αž„αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž– datagrams αžŠαŸ‚αž›αžœαžΆαž‘αž‘αž½αž›αž”αžΆαž“αž–αžΈ server αž‡αžΆαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αŸ”

αž€αžΆαžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈ ៑. αž’αžαž·αžαž·αž‡αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž’αŸαž€αžΌ UDP

# αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› "id_echo.h"

int
មេ (int argc, char *argv[])
{
int sfd, j;
size_t len;
ssize_t numRead;
char buf[BUF_SIZE];

αž”αŸ’αžšαžŸαž·αž“αž”αžΎ (argc < 2 || strcmp(argv[1], "--help") == 0)
useErr("%s host msg…n", argv[0]);

/* αž”αž„αŸ’αž€αžΎαžαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ†αž”αžΌαž„ */
sfd = inetConnect(argv[1], αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜, SOCK_DGRAM);
αž”αŸ’αžšαžŸαž·αž“αž”αžΎ (sfd == -1)
fatal("αž˜αž·αž“αž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžšαž“αŸ’αž’αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ");

/* αž•αŸ’αž‰αžΎαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆ datagrams αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ */
αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ (j = 2; j < argc; j ++) {
αž›αŸαž“ = strlen(argv[j]);
αž”αŸ’αžšαžŸαž·αž“αž”αžΎ (សរសេរ(sfd, argv[j], len) != len)
fatal("αž€αžΆαžšαžŸαžšαžŸαŸαžšαžŠαŸ„αž™αž•αŸ’αž“αŸ‚αž€/αž”αžšαžΆαž‡αŸαž™");

numRead = αž’αžΆαž“(sfd, buf, BUF_SIZE);
αž”αŸ’αžšαžŸαž·αž“αž”αžΎ (numRead == -1)
errExit("αž’αžΆαž“");
printf("[%ld bytes]%.*sn", (long) numRead, (int) numRead, buf);
}
αž…αŸαž‰(EXIT_SUCCESS);
}
__________________________________________________________________sockets/id_echo_cl.c

αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αžƒαžΎαž‰αž“αŸ…αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž“αž·αž„αž’αžαž·αžαž·αž‡αž“αž–αžΈαžšαŸ–

$su // αžŸαž·αž‘αŸ’αž’αž·αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž…αŸ’αžšαž€αžŠαŸ‚αž›αž”αžΆαž“αž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€
αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹:
# ./id_echo_sv // αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™
# αž…αŸαž‰ // αž”αŸ„αŸ‡αž”αž„αŸ‹αžŸαž·αž‘αŸ’αž’αž·αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„
$ ./id_echo_cl localhost hello world // αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž“αŸαŸ‡αž•αŸ’αž‰αžΎ datagram αž–αžΈαžš
[5 αž”αŸƒ] αž‡αŸ†αžšαžΆαž”αžŸαž½αžš // αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž”αž„αŸ’αž αžΆαž‰αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ
[5 αž”αŸƒ] αž–αž·αž—αž–αž›αŸ„αž€
$ ./id_echo_cl localhost goodbye // αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž“αŸαŸ‡αž•αŸ’αž‰αžΎ datagram αž˜αž½αž™αŸ”
[7 αž”αŸƒ] αž›αžΆαž αžΎαž™αŸ”

αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αž‡αžΌαž“αž–αžšαž±αŸ’αž™αž’αŸ’αž“αž€αž’αžΆαž“αžšαžΈαž€αžšαžΆαž™)

αž”αŸ’αžšαž—αž–: linux.org.ru