当前位置:  开发笔记 > 运维 > 正文

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

如何解决《如何从unixc中的addrinfo获取端口号》经验,为你挑选了1个好方法。

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

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

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



1> David Gelhar..:

你做了类似于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(或scokaddr_in6)结构中端口号的#1陷阱:端口号始终以网络字节顺序存储.

这意味着,例如,如果您打印出上面"get_in_port"调用的结果,则需要输入"ntohs()":

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

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有