Поскольку UDP не основан на соединении (нет connect(sd, ...)
вызова, в котором вы говорите: с этого момента все данные, относящиеся к дескриптору сокета sd
, будут поступать от хорошо известной пары IP-портов), всякий раз, когда вы запускаете recvfrom()
, он (пытается) вернуть вы - адрес, откуда поступают входящие данные.
Он записывает адрес в буфер src_addr, если он не равен NULL. Этот буфер предоставляется вызывающей стороной, и его размер должен быть указан в параметре addr_len. Он передается по указателю, потому что recvfrom()
, после использования его для ограничения количества данных, записываемых в src_addr, перезапишет его с помощью фактической длины адреса. Можно сказать, что addr_len - это параметр ввода-вывода.
С другой стороны, вызывающий sendto()
будет точно знать адрес назначения, поэтому addr_len в этом случае передается по значению, поскольку является параметром только для ввода.
Эта информация четко объяснена в руководстве, на которое вы указали ссылку в вопросе.
person
Roberto Caboni
schedule
18.10.2019