"Linux API" рдмреБрдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╡реНрдпрд╛рдкрдХ рдЧрд╛рдЗрдб"


"Linux API" рдмреБрдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╡реНрдпрд╛рдкрдХ рдЧрд╛рдЗрдб"

рд╢реБрдн рджрд┐рдЙрдБрд╕реЛ рдо рддрдкрд╛рдЗрдБрдХреЛ рдзреНрдпрд╛рди рдорд╛ "Linux API" рдкреБрд╕реНрддрдХ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджрдЫреБред рдПрдХ рд╡реНрдпрд╛рдкрдХ рдЧрд╛рдЗрдб" (рдкреБрд╕реНрддрдХрдХреЛ рдЕрдиреБрд╡рд╛рдж рд▓рд┐рдирдХреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рдЗрдиреНрдЯрд░рдлреЗрд╕)ред рдпрд╕рд▓рд╛рдИ рдкреНрд░рдХрд╛рд╢рдХрдХреЛ тАЛтАЛрд╡реЗрдмрд╕рд╛рдЗрдЯрдорд╛ рдЕрд░реНрдбрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рд░ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рд╡рд░реНрдзрдирд╛рддреНрдордХ рдХреЛрдб рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ LinuxAPI , рддрдкрд╛рдИрдВрд▓реЗ 30% рдЫреБрдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫред

рд╕рдиреНрджрд░реНрднрдХреЛ рд▓рд╛рдЧрд┐ рдкреБрд╕реНрддрдХрдмрд╛рдЯ рдЕрдВрд╢:

рд╕рдХреЗрдЯрд╣рд░реВ: рд╕рд░реНрднрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛

рдпрд╕ рдЕрдзреНрдпрд╛рдпрдорд╛, рд╣рд╛рдореА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд░ рд╕рдорд╛рдирд╛рдиреНрддрд░ рд╕рд░реНрднрд░рд╣рд░реВ рдбрд┐рдЬрд╛рдЗрди рдЧрд░реНрдиреЗ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ inetd рднрдирд┐рдиреЗ рд╡рд┐рд╢реЗрд╖ рдбреЗрдордирд▓рд╛рдИ рдкрдирд┐ рд╣реЗрд░реНрдиреЗрдЫреМрдВ, рдЬрд╕рд▓реЗ рдЗрдиреНрдЯрд░рдиреЗрдЯ рд╕рд░реНрднрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрдЫред

рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд░ рд╕рдорд╛рдирд╛рдиреНрддрд░ рд╕рд░реНрднрд░рд╣рд░реВ

рддреНрдпрд╣рд╛рдБ рджреБрдИ рд╕рд╛рдорд╛рдиреНрдп рд╕рдХреЗрдЯ-рдЖрдзрд╛рд░рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рд╕рд░реНрднрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╣рд░реВ рдЫрдиреН:

  • рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐: рд╕рд░реНрднрд░рд▓реЗ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓рд╛рдИ рдПрдХ рдкрдЯрдХрдорд╛ рд╕реЗрд╡рд╛ рдЧрд░реНрджрдЫ, рдкрд╣рд┐рд▓реЗ рдПрдХ рдЧреНрд░рд╛рд╣рдХрдмрд╛рдЯ рдЕрдиреБрд░реЛрдз (рд╡рд╛ рдзреЗрд░реИ рдЕрдиреБрд░реЛрдзрд╣рд░реВ) рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджреИ рд░ рддреНрдпрд╕рдкрдЫрд┐ рдЕрд░реНрдХреЛрдорд╛ рд╕рд░реНрджреИ;

  • рд╕рдорд╛рдирд╛рдиреНрддрд░: рд╕рд░реНрднрд░ рдПрдХреИ рд╕рд╛рде рдзреЗрд░реИ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВ рд╕реЗрд╡рд╛ рдЧрд░реНрди рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЫред

FIFO рд▓рд╛рдорд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рд░реНрднрд░рдХреЛ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд┐рд▓реЗ рдиреИ рдЦрдгреНрдб 44.8 рдорд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред

рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рд░реНрднрд░рд╣рд░реВ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХреЗрд╡рд▓ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВрдорд╛ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫрдиреН рдЬрд╣рд╛рдБ рдХреНрд▓рд╛рдЗрдиреНрдЯ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдЪрд╛рдБрдбреИ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдХрд┐рдирдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдиреНрдЯрд╣рд░реВ рдпрд╕рдХреЛ рдЕрдЧрд╛рдбрд┐ рдХреБрдиреИ рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдиреНрдЯрд╣рд░реВ рд╕реЗрд╡рд╛ рдирднрдПрд╕рдореНрдо рдкрд░реНрдЦрди рдмрд╛рдзреНрдп рд╣реБрдиреНрдЫрдиреНред рдпрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЧ рдХреЗрд╕ рдЧреНрд░рд╛рд╣рдХ рд░ рд╕рд░реНрднрд░ рдмреАрдЪ рдПрдХрд▓ рдЕрдиреБрд░реЛрдз рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рдЖрджрд╛рдирдкреНрд░рджрд╛рди рд╣реЛред

рд╕рдорд╛рдирд╛рдиреНрддрд░ рд╕рд░реНрднрд░рд╣рд░реВ рддреА рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫрдиреН рдЬрд╣рд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдзрд▓рд╛рдИ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╕рдордп рд▓рд╛рдЧреНрдЫ, рд╡рд╛ рдЬрд╣рд╛рдБ рдЧреНрд░рд╛рд╣рдХ рд░ рд╕рд░реНрднрд░ рд▓рд╛рдореЛ рд╕рдиреНрджреЗрд╢ рдЖрджрд╛рдирдкреНрд░рджрд╛рдирдорд╛ рд╕рдВрд▓рдЧреНрди рд╣реБрдиреНрдЫрдиреНред рдпрд╕ рдЕрдзреНрдпрд╛рдпрдорд╛, рд╣рд╛рдореА рдореБрдЦреНрдпрддрдпрд╛ рд╕рдорд╛рдирд╛рдиреНрддрд░ рд╕рд░реНрднрд░рд╣рд░реВ рдбрд┐рдЬрд╛рдЗрди рдЧрд░реНрдиреЗ рдкрд░рдореНрдкрд░рд╛рдЧрдд (рд░ рд╕рд░рд▓) рддрд░рд┐рдХрд╛рдорд╛ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬреБрди рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рдЧреНрд░рд╛рд╣рдХрдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рд╣реЛред рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓реЗ рдЧреНрд░рд╛рд╣рдХрд▓рд╛рдИ рд╕реЗрд╡рд╛ рджрд┐рди рд╕рдмреИ рдХрд╛рдо рдЧрд░реНрджрдЫ рд░ рддреНрдпрд╕рдкрдЫрд┐ рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫред рдХрд┐рдирднрдиреЗ рдпреА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рд╕реНрд╡рддрдиреНрддреНрд░ рд░реВрдкрдорд╛ рд╕рдЮреНрдЪрд╛рд▓рди рд╣реБрдиреНрдЫрдиреН, рдпреЛ рдПрдХреИ рд╕рд╛рде рдзреЗрд░реИ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓рд╛рдИ рд╕реЗрд╡рд╛ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред рдореБрдЦреНрдп рд╕рд░реНрднрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдЕрднрд┐рднрд╛рд╡рдХ) рдХреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рдЧреНрд░рд╛рд╣рдХрдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рдмрдЪреНрдЪрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рд╣реЛ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдкрдорд╛, рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд╕рдЯреНрдЯрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдереНрд░реЗрдбрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ)ред

рдирд┐рдореНрди рдЦрдгреНрдбрд╣рд░реВрдорд╛, рд╣рд╛рдореА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд░ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдЗрдиреНрдЯрд░рдиреЗрдЯ рдбреЛрдореЗрди рд╕рдХреЗрдЯ рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╣реЗрд░реНрдиреЗрдЫреМрдВред рдпреА рджреБрдИ рд╕рд░реНрднрд░рд╣рд░реВрд▓реЗ рдЗрдХреЛ рд╕реЗрд╡рд╛ (RFC 862) рдХреЛ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ рдЧреНрд░рд╛рд╣рдХрджреНрд╡рд╛рд░рд╛ рдкрдард╛рдЗрдПрдХреЛ рдХреБрдиреИ рд╕рдиреНрджреЗрд╢рдХреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдлрд░реНрдХрд╛рдЙрдБрдЫред

рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ UDP рд╕рд░реНрднрд░ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐

рдпреЛ рд░ рдЕрд░реНрдХреЛ рдЦрдгреНрдбрдорд╛ рд╣рд╛рдореА рдЗрдХреЛ рд╕реЗрд╡рд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░реНрднрд░рд╣рд░реВ рдкрд░рд┐рдЪрдп рдЧрд░реНрдиреЗрдЫреМрдВред рдпреЛ рдкреЛрд░реНрдЯ рдирдореНрдмрд░ 7 рдорд╛ рдЙрдкрд▓рдмреНрдз рдЫ рд░ UDP рд░ TCP рджреБрд╡реИ рдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ (рдпреЛ рдкреЛрд░реНрдЯ рдЖрд░рдХреНрд╖рд┐рдд рдЫ, рд░ рддреНрдпрд╕реИрд▓реЗ рдЗрдХреЛ рд╕рд░реНрднрд░ рдкреНрд░рд╢рд╛рд╕рдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕рдВрдЧ рдЪрд▓рд╛рдЙрдиреБ рдкрд░реНрдЫ)ред

рдЗрдХреЛ UDP рд╕рд░реНрднрд░рд▓реЗ рдбреЗрдЯрд╛рдЧреНрд░рд╛рдорд╣рд░реВ рдирд┐рд░рдиреНрддрд░ рдкрдвреНрдЫ рд░ рдкреНрд░реЗрд╖рдХрд▓рд╛рдИ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐рд╣рд░реВ рдлрд░реНрдХрд╛рдЙрдБрдЫред рдХрд┐рдирдХрд┐ рд╕рд░реНрднрд░рд▓реЗ рдПрдХ рдкрдЯрдХрдорд╛ рдПрдЙрдЯрд╛ рд╕рдиреНрджреЗрд╢ рдорд╛рддреНрд░ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реБрдиреЗрдЫред рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓ рд╕реВрдЪреА 56.1 рдорд╛ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫред

рд╕реВрдЪреА резред id_echo_sv.c рд░ id_echo_cl.c рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓

#include "inet_sockets.h" /* рд╣рд╛рдореНрд░реЛ рд╕рдХреЗрдЯ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдШреЛрд╖рдгрд╛ рдЧрд░реНрджрдЫ */
# "tlpi_hdr.h" рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреБрд╣реЛрд╕реН

#рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реЗрд╡рд╛ "рдЗрдХреЛ" /* UDP рд╕реЗрд╡рд╛ рдирд╛рдо */

#define BUF_SIZE 500 /* рдбрд╛рдЯрд╛рдЧреНрд░рд╛рдордХреЛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рдЬреБрди
рдЧреНрд░рд╛рд╣рдХ рд░ рд╕рд░реНрднрд░ рджреНрд╡рд╛рд░рд╛ рдкрдвреНрди рд╕рдХрд┐рдиреНрдЫ */
______________________________________________________________ sockets/id_echo.h

рд╕реВрдЪреА 56.2 рд▓реЗ рд╕рд░реНрднрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦрд╛рдЙрдБрдЫред рдирд┐рдореНрди рдмреБрдБрджрд╛рд╣рд░реВ рдзреНрдпрд╛рди рджрд┐рди рд▓рд╛рдпрдХ рдЫрдиреН:

  • рд╕рд░реНрднрд░рд▓рд╛рдИ рдбреЗрдорди рдореЛрдбрдорд╛ рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдЦрдгреНрдб 37.2 рдмрд╛рдЯ becomeDaemon() рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ;

  • рдХрд╛рд░реНрдпрдХреНрд░рдорд▓рд╛рдИ рдердк рдХрдореНрдкреНрдпрд╛рдХреНрдЯ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рд╕реЗрдХреНрд╕рди 55.12 рдорд╛ рд╡рд┐рдХрд╕рд┐рдд рдЗрдиреНрдЯрд░рдиреЗрдЯ рдбреЛрдореЗрди рд╕рдХреЗрдЯрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ;

  • рдпрджрд┐ рд╕рд░реНрднрд░рд▓реЗ рдХреНрд▓рд╛рдЗрдиреНрдЯрд▓рд╛рдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдлрд░реНрдХрд╛рдЙрди рд╕рдХреНрджреИрди рднрдиреЗ, рдпрд╕рд▓реЗ syslog() рдХрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд▓рдЧрдорд╛ рд╕рдиреНрджреЗрд╢ рд▓реЗрдЦреНрдЫред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛, рд╣рд╛рдореАрд▓реЗ syslog() рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд▓рдЧрд┐рдЩ рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрдорд╛ рдХреЗрд╣реА рд╕реАрдорд╛ рд▓рдЧрд╛рдЙрди рд╕рдХреНрдЫреМрдВред рдпрд╕рд▓реЗ рдкреНрд░рдгрд╛рд▓реА рд▓рдЧ рдУрднрд░рдлреНрд▓реЛ рдЧрд░реНрдиреЗ рдЖрдХреНрд░рдордгрдХрд╛рд░реАрдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛рд▓рд╛рдИ рд╣рдЯрд╛рдЙрдиреЗрдЫред рдердк рд░реВрдкрдорд╛, рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрд▓ syslog() рдорд╛ рдзреЗрд░реИ рдорд╣рдБрдЧреЛ рдЫ, рдХрд┐рдирдХрд┐ рдпрд╕рд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ fsync() рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред

рд╕реВрдЪреА резред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рд░реНрднрд░ рдЬрд╕рд▓реЗ UDP рдЗрдХреЛ рд╕реЗрд╡рд╛ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫ

______________________________________________________________ sockets/id_echo_sv.c
#рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреБрд╣реЛрд╕реН
# "id_echo.h" рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреБрд╣реЛрд╕реН
# "become_daemon.h" рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреБрд╣реЛрд╕реН

int
рдореБрдЦреНрдп (int argc, char *argv[])
{
int sfd;
ssize_t numRead;
socklen_t len;
рд╕рдВрд░рдЪрдирд╛ sockaddr_storage claddr;
рдЪрд╛рд░ рдмрдл [BUF_SIZE];
char addrStr[IS_ADDR_STR_LEN];

рдпрджрд┐ (рдбреЗрдорди(реж) == -рез)
errExit("becomeDaemon");

sfd = inetBind(SERVICE, 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)
!= рд╕рдВрдЦреНрдпрд╛ рдкрдвреНрдиреБрд╣реЛрд╕реН)
syslog(LOG_WARNING, "%s (%s) рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рдЧрд░реНрджрд╛ рддреНрд░реБрдЯрд┐",
inetAddressStr((struct sockaddr*) &claddr, len,
addrStr, IS_ADDR_STR_LEN),
strerror(errno));
}
}
______________________________________________________________ sockets/id_echo_sv.c

рд╕рд░реНрднрд░рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рди рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди, рд╣рд╛рдореА рд╕реВрдЪреА 56.3 рдмрд╛рдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред рдпрд╕рд▓реЗ рдЦрдгреНрдб 55.12 рдорд╛ рд╡рд┐рдХрд╕рд┐рдд рдЗрдиреНрдЯрд░рдиреЗрдЯ рдбреЛрдореЗрди рд╕рдХреЗрдЯрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдкрд╣рд┐рд▓реЛ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рддрд░реНрдХрдХреЛ рд░реВрдкрдорд╛, рдХреНрд▓рд╛рдЗрдиреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдиреЛрдбрдХреЛ рдирд╛рдо рд▓рд┐рдиреНрдЫ рдЬрд╕рдорд╛ рд╕рд░реНрднрд░ рдЕрд╡рд╕реНрдерд┐рдд рдЫред рдХреНрд▓рд╛рдЗрдиреНрдЯрд▓реЗ рд▓реБрдкрдорд╛ рдкреНрд░рд╡реЗрд╢ рдЧрд░реНрдЫ рдЬрд╣рд╛рдБ рдпрд╕рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдБрдХреА рддрд░реНрдХрд╣рд░реВрд▓рд╛рдИ рд╕рд░реНрднрд░рдорд╛ рдЫреБрдЯреНрдЯреИ рдбрд╛рдЯрд╛рдЧреНрд░рд╛рдордХреЛ рд░реВрдкрдорд╛ рдкрдард╛рдЙрдБрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рд╕рд░реНрднрд░рдмрд╛рдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдорд╛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреЗ рдбрд╛рдЯрд╛рдЧреНрд░рд╛рдорд╣рд░реВ рдкрдвреНрдЫ рд░ рдЫрд╛рдкреНрдЫред

рд╕реВрдЪреА резред UDP рдЗрдХреЛ рд╕реЗрд╡рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЧреНрд░рд╛рд╣рдХ

# "id_echo.h" рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреБрд╣реЛрд╕реН

int
рдореБрдЦреНрдп (int argc, char *argv[])
{
int sfd, j;
рд╕рд╛рдЗрдЬ_рдЯреА рд▓реЗрди;
ssize_t numRead;
рдЪрд╛рд░ рдмрдл [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++) {
рд▓реЗрди = 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 // рдпреЛ рдХреНрд▓рд╛рдЗрдиреНрдЯрд▓реЗ рджреБрдИ рдбрд╛рдЯрд╛рдЧреНрд░рд╛рдо рдкрдард╛рдЙрдБрдЫ
[рел рдмрд╛рдЗрдЯреНрд╕] рдирдорд╕реНрдХрд╛рд░ // рдХреНрд▓рд╛рдЗрдиреНрдЯрд▓реЗ рд╕рд░реНрднрд░рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЦрд╛рдЙрдБрдЫ
[рел рдмрд╛рдЗрдЯреНрд╕] рд╕рдВрд╕рд╛рд░
$ ./id_echo_cl localhost рдЕрд▓рд╡рд┐рджрд╛ // рдпреЛ рдХреНрд▓рд╛рдЗрдиреНрдЯрд▓реЗ рдПрдЙрдЯрд╛ рдбрд╛рдЯрд╛рдЧреНрд░рд╛рдо рдкрдард╛рдЙрдБрдЫ
[рен рдмрд╛рдЗрдЯреНрд╕] рдЕрд▓рд╡рд┐рджрд╛

рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рд░рд╛рдореНрд░реЛ рдкрдврд╛рдЗрдХреЛ рдХрд╛рдордирд╛ рдЧрд░реНрджрдЫреБ)

рд╕реНрд░реЛрдд: linux.org.ru