【发布时间】:2021-10-23 02:12:01
【问题描述】:
这是一段来自tftp的sn-p代码
void initsock(int af) {
struct sockaddr_storage s_in;
if (f >= 0)
close(f);
f = socket(af, SOCK_DGRAM, 0);
if (f < 0) {
perror("tftp: socket");
exit(3);
}
printf("protocol family: %d\n", af);
memset(&s_in, 0, sizeof(s_in));
s_in.ss_family = af;
if (bind(f, (struct sockaddr *)&s_in, sizeof (s_in)) < 0) {
perror("tftp: bind");
exit(1);
}
char ip_str[INET6_ADDRSTRLEN] = {0};
inet_ntop(s_in.ss_family, get_in_addr((struct sockaddr *)&s_in), ip_str, sizeof ip_str);
printf("ip address: %s\t port: %d\n", ip_str, get_in_port((struct sockaddr *)&s_in));
}
我的问题是为什么在这里调用 bind() ?目的是什么?第二个参数似乎是空的,除了 ss_family 字段,没有 IP 地址或端口号。
【问题讨论】:
-
这个 sn-p 来自什么 TFTP 实现?你能发布一个存储库的链接吗?
-
看起来它用于使用“ANY”地址和临时端口绑定到 IPv4 或 IPv6。所以基本上是选择要使用的 IP 版本。