繁体   English   中英

如何从 unix c 中的 struct addrinfo 获取端口号

[英]How to get the port number from struct addrinfo in unix c

我需要通过特定端口中的 UDP 将一些数据发送到远程服务器并从它接收响应。 但是,它正在阻塞,我没有得到任何响应。 我需要检查从getaddrinfo(SERVER_NAME, port, &hints, &servinfo)获得的 addrinfo 值是否正确。

如何从这个数据结构中获取端口号?

我知道inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr), s, sizeof s)给了我服务器 IP 地址。 (我正在使用 Beej 指南中的方法。)

你做一些类似于 Beej 的 get_in_addr 函数所做的事情:

// get port, IPv4 or IPv6:
in_port_t get_in_port(struct sockaddr *sa)
{
    if (sa->sa_family == AF_INET)
        return (((struct sockaddr_in*)sa)->sin_port);

    return (((struct sockaddr_in6*)sa)->sin6_port);
}

还要注意在sockaddr_in (或sockaddr_in6 )结构中处理端口号的#1 陷阱:端口号总是以网络字节顺序存储。

这意味着,例如,如果你打印出上面get_in_port()调用的结果,你需要抛出一个ntohs()

printf("port is %d\n", ntohs(get_in_port((struct sockaddr *)p->ai_addr)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM