unix网络编程读书心得(1)

学习或者读一本书重在积累,看后的想法,书中的一些以前自己不知道的地方。每天坚持都写点东西,激励自己。

        bzero不是ANSI C函数。它起源于早期的berkeley网络编程代码,这本书多是使用它而不是ANSI C的memset函数,因为bzero(带2个参数)比memset(带3个参数)更好记忆。几乎所有支持套接字API的厂商都提供bzero,如果没有,可以使用unp.h头文件中提供的该函数的宏定义。

        inet_pton函数,是一个支持IPv6的新函数,以前的代码使用inet_addr函数来把ASCII点分十进制数串变换成正确的格式,不过它有不少局限,而这些局限在inet_pton中都得以纠正。

inet_pton:Linux下IP地址转换函数,可以将IP地址在点分十进制和整数之间转换。

int inet_pton(int af, const char *src, void *dst);

inet_pton是inet_addr的扩展,支持多地址族 af = AF_INET,src指向字符型的地址(ipv6的地址),即ASCII的首地址(ddd.ddd.ddd.ddd),函数将该地址转换为in_addr(in6_addr)的结构体,并复制在*dst中。如果出错返回一个负值,并将errno设置为EAFNOSUPPORT,如果af指定的地址族和src格式不对,函数将返回0。

inet_ntop:const *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);

后者比前者多了socklen_t cnt,指向缓存区dst的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将errno置为ENOSPC。


struct sockaddr{

unsigned short sa_family;  /*address family, AF_XXX*/

char sa_data[14];  /*14bytes of protocol address*/


<netinet/in.h>

struct sockaddr_in {

short sin_family;  /*address family*/

unsigned short sin_port;  /*port number*/

struct in_addr sin_addr;  /*internet address*/

unsigned char sin_zero[8];  /*same size as struct sockaddr*/

};


sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可指向sockaddr的结构体,并代替它,即可以使用sockaddr_in建立你所需要的信息,然后用bzero函数初始化就可以了,如下:

sockaddr_in mysock;
bzero((char*)&mysock,sizeof(mysock));


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值