今天看 isc-dhcp-源代码发现一个结构体不认识 struct servent。遂查之,通过阅读资料手动尝试,现总结如下:
定义于:/usr/include/netdb.h
/* Description of data base entry for a single service. */
struct servent {
char *s_name; /* Official service name. */
char **s_aliases; /* Alias list. */
int s_port; /* Port number. */
char *s_proto; /* Protocol to use. */
};
相关的函数:
struct servent *getservent(void);
struct servent *getservbyname(const char *name, const char *proto);
struct servent *getservbyport(int port, const char *proto);
具体的 man 手册都有。稍微介绍下就是从 netdb.h 获取各个服务器端口号,别名等信息。
那么netdb.h 在哪呢?
这个在 /etc/services 文件里。这里面记录了常用的服务器监听的端口号。
比如 smtp 监听25 ssh 22 mysql 3306 ...
</pre><pre name="code" class="cpp">int main()
{
struct servent* p = getservbyname( "smtp", "tcp" );
if( NULL == p )
{
perror( "getservbyname" );
return -1;
}
//这里注意 port 一定是要 转换成主机字节序
printf( "serverName:%s, port=%d\n", p->s_name, ntohs( p->s_port) );
return 0;
}
结构
最后提醒大家注意的是;一定记得把 s_port 成员 ntohls 一下。