UNIX网络编程(三)---套接字编程简介

UNIX网络编程 第3章   套接字编程简介

 

一、套接字地址基本结构

 

大多数套接字地址结构以sockaddr_in命名,每个协议族都定义它的套接字地址结构。

 

       1)IPv4套接字地址结构

 

为什么in_addr结构体内仅有一个in_addr_t字段的结构?

以前地址被分为A,B,C类的时候,为了便于获得地址中的适当字节,允许访问一个32位IPv4地址中的所有4个字节,或者访问它的2个16位值。随着子网划分技术和无类地址编排的出现,不再需要了。

            套接字地址结构仅在主机上使用,但并不在主机之间传递。

 

 

          2)通用套接字地址结构

 

通用套接字地址结构的唯一用途就是对指向特定于协议的套接字地址结构的指针执行类型强制转换:

 

其实通用套接字struct sockaddr结构体的大小(16字节)和常用的套接字地址struct sockaddr_in大小一样。

 

 

3)IPv6套接字地址结构

 

 

          4) 新的通用套接字地址结构

          

 

 

 

 

 

二、值-结果参数

        套接字地址结构传递的时候,都是传递指针,该结构的长度也作为一个参数传递,不过其传递方式取决于该结构的传递方向:进程到内核,内核到进程。

  1. 从进程到内核传递套接字结构的函数有3个:bind、connect和 sendto 。这些函数的一个参数是指向某个套接字地址结构的指针,另一个参数是该结构的整数大小。
  2. 从内核到进程传递套接字结构的函数有4个:accept、recvfrom、getsockname和getpeername。这4个函数的其中两个参数是:套接字结构的指针 和 该结构大小的指针。

 

原因在于:当函数被调用时,结构大小是一个值,它告诉内核该结构的大小,这样内核在写该结构时不至于越界;当函数返回时,结构大小又是一个结果,它告进程  内核在改结构中究竟存储了多少信息。这些类型的参数称为 值-结果 参数。

 

一句话概括:

从进程传递给内核的参数是需要让内核知道内核需要读取多少字节

从内核传递给内核的参数是需要让进程知道内核给进程写了多少字节

 

 

三、字节排序函数

大端:高序字节存储在起始地址。(像我们写东西)

小端:低序字节存储在起始地址。(WIN,LINUX都采用小端)

 

 

这两种格式都有系统可以使用,给定系统所用的字节序称为主机字节序。网络协议指定一个网络字节序(采用大端)。

 

这两种字节序之间的转换函数:

 

 

 

  • 字节操纵函数

 

 

五、inet_aton   inet_addr 和 inet_ntoa 地址转换函数

a:ASIC   n:numeric

 

由于inet_addr不能处理255.255.255.255(有限广播地址)转化为二进制,因为它出错时返回INADDR_NONE(通常是一个32位均为1的值)

 

六、函数:inet_pton 和 inet_ntop函数

 

这两个函数是随IPv6出现的新函数,对于IPv4和IPv6都适用。

第二个函数strprt不能是空指针,调用者必须为目标存储单元分配内存并指定其大小。调用成功,这个指针就是该函数的返回值。如果len太小,则返回一个空指针,并且置errno为 ENOSPC。

 

 

 

 

 

七、本书中编写的几个函数(P70,72)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值