第三章 套接字编程(1) - 套接字地址结构

套接字地址结构
1. IPv4套接字地址结构
   IPv4套接字地址结构通常称为“网际套接字地址结构”,它以sockadd_in命名,定义在

<netinet/in.h>头文件中。
   struct in_addr{
       in_addr_t s_addr;     /*32位IPv4地址,网络字节序*/
   };
   
   struct sockaddr_in{
        uint8_t         sin_len;
        sa_family_t     sin_family;  /*AF_INET*/
        in_port_t       sin_port;    /*16位TCP或者UDP端口号,网络字节序*/
        struct in_addr  sin_addr;    /*32位IPv4结构,网络字节序*/
        char            sin_zero[8]; /*未使用*/
   };

POSIX规范只需要这个结构中的3个字段:sin_family、sin_addr和sin_port。


2. 通用套接字地址结构
    当作为一个参数传递给任何套接字函数时,套接字地址结构总是以引用形式(也就是以指向该结构的指针)来传递。然而以这样的指针作为参数之一的任何套接字函数必须处理来自所支持的任何协议族的套接字地址结构。
    在<sys/socket.h>头文件中定义一个通用的套接字地址结构如下:
    struct sockaddr{
        uint8_t       sa_len;
        sa_family_t   sa_family;  /*地址族:AF_xxx*/
        char          sa_data[4];  /**/

    };


3. 值-结果参数

(1) 从进程到内核传递套接字地址结构的函数有3个:bind、connect和sendto。这些函数的一个参数是执行某个套接字地址结构的指针,另一个参数是该结构的证书大小。

将指针和指针所指向内容的大小都传递给内核,于是内核知道到底需从进程复制多少数据。

(2) 从内核到进程传递套接字地址结构的函数有4个:accept、recvfrom、getsockname和getpeername。这4个函数的其中两个参数指向某个套接字地址结构的指针和指向表示该结构大小的整数变量的指针

当函数背调用时,结构大小是一个值,它告诉内核该结构的大小,这样内核在写该结构时不至于越界;当函数返回时,结构大小又是一个结构,它告诉进程内核在该结构中究竟存储了多少信息。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值