getservbyname 及 struct servent

7 篇文章 0 订阅

今天看 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 一下。

 



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值