在C中,您可以使用服务名称来获取使用getaddrinfo时的端口号,如下所示:
getaddrinfo("stackoverflow.com", "http", &hints, &results);
这会将80(大端)分配给结果的前两个字节(uint16_t) - > ai_addr。
是否有一些简单的方法可以从中获取端口号?提供服务名称?我需要这个用于服务器端,我希望允许用户指定要绑定和监听的端口的端口号或服务名称。
答案 0 :(得分:3)
使用带有空指针的getaddrinfo
和标志中的AI_PASSIVE
将为您提供绑定以运行服务器的sockaddr
。请参阅getaddrinfo
的文档:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html
答案 1 :(得分:1)
man getservbyname
#include \netdb.h>
struct servent *getservent(void);
struct servent *getservbyname(const char *name, const char *proto);
struct servent *getservbyport(int port, const char *proto);