当前位置: 首页 > news >正文

初学Sockets编程(二) 关于名称和地址族

 这一章的核心内容是getaddrinfo()函数。

 

int getaddrinfo(constchar*hostStr, constchar* serviceStr, conststruct addrinfo *hints, 
struct addrinfo **results)
//需要配合下面函数进行使用
void freeaddrinfo(struct addrinfo *addrList) //释放创建的结果链表
const char *gai_strerror(int errorCode) //如果getaddrinfo返回非0值,可以描述出错的是什么

 

  含义:

  hostStr    主机名称或地址,以NULL结尾的字符串

  serviceStr    服务名称或端口号,以NULL结尾的字符串

  hints     要返回信息的种类,可以实现选择

  results   存储一个指向包含结果的链表的指针

 对于addrinfo结构,如下所示:

复制代码
struct addrinfo {
  int ai_flags;//Flags to control info resolution
  int ai_family;//Family:AF_INET,AF_INET6,AF_UNSPEC
  int ai_socktype;//Socket type:SOCK_STREAM,SOCK_DGRAM
  int ai_protocol;//Protocol: 0(default) or IPPROTO_XXX
  socklen_t ai_addrlen;//Length of socket address ai_addr
  struct sockaddr *ai_addr;//Socket address for socket
  char*ai_canonname;//Canonical name
  struct addrinfo *ai_next;//Next addrinfo in linked list
};
复制代码

 

  利用getaddrinfo()函数编写出的SetupTCPClientSocket()和SetupTCPServerSocket()可以很方便地隐藏IPv4和IPv6地址的差异,根据它重写的TCPEchoClient.c和TCPEchoServer.c就可以同时处理两种类型的地址了。


  本章最后还提到了从Internet地址获取主机名称的getnameinfo()和获取自己主机名称的gethostname(),不再详述。




本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/archive/2011/08/04/2127913.html,如需转载请自行联系原作者

相关文章:

  • HDU - 1166 敌兵布阵
  • Flask+腾讯云windows主机快速搭建微信公众号接口
  • 一、简单工厂模式
  • 微软将所有的Windows代码库迁移到Git
  • magento megatron主题加入中文
  • 对象不支持“abigimage”属性或方法
  • Hyper-v创建检查点(VM的快照功能)
  • dede程序打开install安装时出现dir
  • 解答《编程之美》1.18问题1:给所有未标识方块标注有地雷概率
  • 【EMC】基本概念
  • Netty断线重连
  • 不要小看了get 与set
  • redhat7.2升级openssl、openssh
  • [HAOI2016]食物链
  • 事物分析的维度
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Babel配置的不完全指南
  • css属性的继承、初识值、计算值、当前值、应用值
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Linux CTF 逆向入门
  • magento2项目上线注意事项
  • pdf文件如何在线转换为jpg图片
  • socket.io+express实现聊天室的思考(三)
  • VuePress 静态网站生成
  • Vue官网教程学习过程中值得记录的一些事情
  • Xmanager 远程桌面 CentOS 7
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 浮现式设计
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 使用Swoole加速Laravel(正式环境中)
  • 思维导图—你不知道的JavaScript中卷
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 一些css基础学习笔记
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • #vue3 实现前端下载excel文件模板功能
  • (27)4.8 习题课
  • (办公)springboot配置aop处理请求.
  • (笔试题)分解质因式
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (黑马C++)L06 重载与继承
  • (接口封装)
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (算法)求1到1亿间的质数或素数
  • (转载)Google Chrome调试JS
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET 4.0中的泛型协变和反变
  • .NET CLR基本术语
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net mvc部分视图
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。