C 服务到端口号,如getaddrinfo

C 服务到端口号,如getaddrinfo,c,service,port,getaddrinfo,C,Service,Port,Getaddrinfo,在C中,使用getaddrinfo时,可以使用服务名称获取端口号,如下所示: getaddrinfo("stackoverflow.com", "http", &hints, &results); 这将为结果的前两个字节uint16\t->ai\u addr分配80个大端 有什么简单的方法可以从中获取端口号吗?提供服务名称?对于服务器端,我需要这样做,在服务器端,我希望允许用户为要绑定和侦听的端口指定端口号或服务名称。man getservbyname #include \

在C中,使用getaddrinfo时,可以使用服务名称获取端口号,如下所示:

getaddrinfo("stackoverflow.com", "http", &hints, &results);
这将为结果的前两个字节uint16\t->ai\u addr分配80个大端

有什么简单的方法可以从中获取端口号吗?提供服务名称?对于服务器端,我需要这样做,在服务器端,我希望允许用户为要绑定和侦听的端口指定端口号或服务名称。

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);
人名

  #include \netdb.h>
   struct servent *getservent(void);
   struct servent *getservbyname(const char *name, const char *proto);
   struct servent *getservbyport(int port, const char *proto);
使用带有空指针的getaddrinfo作为主机名,并在标志中使用AI_PASSIVE将为您提供一个sockaddr,您可以绑定它来运行服务器。请参阅getaddrinfo的文档:

使用带有空指针的getaddrinfo作为主机名,并在标志中使用AI_PASSIVE将为您提供一个sockaddr,您可以绑定它来运行服务器。请参阅getaddrinfo的文档:


grep-w http/etc/services?@alk这是一个好主意,但是有一些标准的C函数用于此吗?没有,还有getaddrinfo不是标准的C。顺便说一句,您希望如何让服务器侦听服务名称?@alk您是对的,但它来自一个在使用套接字时使用的相当常见的linux库。有什么可比的吗?grep-w http/etc/services?@alk这是个好主意,但是有一些标准的C函数吗?没有,还有getaddrinfo不是标准的C。顺便说一句,你想让服务器监听服务名吗?@alk你是对的,但它来自一个相当普通的linux库,在使用套接字时可以使用。有什么可以比较的吗?仍然是POSIX,1+。@alk注意到我在问题中从未说过它需要来自标准C库。事实上,我提到了getaddrinfo,它不在标准C库中。当我在评论中提到一些标准的C函数时,我的意思更像是在一个常用的C函数/库中,它几乎是要使用的标准,但我感到困惑。这是过时的/不推荐使用的,并且是非线程安全的。正确的方法是getaddrinfo。仍然是POSIX,1+。@alk注意到我在问题中从未说过它需要来自标准C库。事实上,我提到了getaddrinfo,它不在标准C库中。当我在评论中提到一些标准的C函数时,我的意思更像是在一个常用的C函数/库中,它几乎是要使用的标准,但我感到困惑。这是过时的/不推荐使用的,并且是非线程安全的。正确的方法是getaddrinfo。