Linux 套接字socket与地址查询

本文介绍了如何使用hostname命令获取主机名,systemctllist-unit-files命令获取服务信息,并详细讲解了通过getaddrinfo函数获取地址结构的方法及参数含义。同时,还提供了getnameinfo函数用于从地址中获取主机名和服务名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先介绍一下如何获取主机名和服务名吧!

用hostname命令可以获取主机名

那如何获取服务名呢?

通过这个命令systemctl list-unit-files 可以获取系统服务

来了解一个服务,nfs服务。

NFS (Network File System) 即网络文件系统。一种使用于分散式文件系统的协定,功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。

 

有时候我们需要直接获取一个地址结构。用什么办法呢?

用getaddrinfo 函数

#include<sys/socket.h>

#include<netdb.h>

int getaddrinfo(const char* host,const char* service,const struct addrinfo *hint,struct addrinfo **res);

void freeaddrinfo(struct addrinfo *ai);

提供一个主机名和服务名 给第一参数 第二参数

第三参数是一个 addrinfo 结构的指针。这个结构名暂且叫hint,它起到过滤作用。

第四参数是一个 指向addrinfo指针的 指针。是一个链表结构,一个存储addrinfo指针的链表

那一个addrinfo 结构有蕴含什么信息?

int ai_flags  //指定了这个addrinfo的行为

(AI_CANONNAME 需要一个规范名字

 AI_ALL 寻找IPV4 IPV6地址

 AI_ADDRCONFIG 查询配置的地址类型

...etc)

int ai_family //地址族

int ai_socktype //套接字类型

int ai_protocol //协议类型

socklen_t ai_addrlen //地址长度

struck sockaddr *ai_addr //地址结构

char *ai_canonname //

struct addrinfo *ai_next

...etc

还有一个函数与之相反是通过一个地址获得主机名和服务名

#include<sys/socket.h>

#include<netdb.h>

 int getnameinfo(const struct sockaddr *addr,socklen_t alen,

 char* host,socklen_t hostlen,

 char* service,socklen_t servlen,int flags);

 

还有一些其他的类似结构体

hostent 主机信息的

netent 网络信息的

protoent 协议信息的

servent 服务信息的

 

转载于:https://www.cnblogs.com/zzzPark/p/6400567.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值