Unix网络编程 第三章 笔记

Unix网络编程 第三章 笔记


1. 套接字地址结构

1.1 IPv4套接字地址结构



套接字地址结构仅在给定主机上使用:虽然结构中某些字段(如IP地址和端口号)用在不同主机之间通信中,但是结构本身并不在主机之间传递。

1.2 通用套接字地址结构
当套接字地址结构传入任何套接字函数时,套接字地址结构总是以引用的形式来传递。对这些函数的任何调用都必须要将指向特定于协议的套接字地址结构指针进行类型强制转换,变成指向某个通用套接字地址结构的指针:
int bind(int, struct sockaddr *, socklen_t);

struct sockaddr_in serv; /* IPv4 socket address structure */
/* fill in serv */
bind(sockfd, (struct sockaddr *) &serv, sizeof(serv));

1.3 IPv6套接字地址结构


2. 值-结果参数

当向一个套接字函数传递参数时,既要传递套接字地址的引用也要传递套接字地址结构的长度。传递方式取决于该结构的传递方向:从进程到内核,还是从内核到进程
(1)从进程到内核的函数:bind, connect,sendto

(2)从内核到进程:accept, recvfrom, getsockname, getpeername,如:
struct sockaddr_un cli;  /* Unix domain */
socklen_t len;          /* 套接字地址结构的长度的类型是socklen_t,但是POSIX规范建议将socklen_t定义为uint_32 */

len = sizeof(cli);  /*
getpeername(unixfd, (struct sockaddr *) &cli, &len); /* len may have changed */
从内核到进程,将套接字结构体大小这个参数从一个整数改为了指向某个整数变量的指针,原因在于:当函数被调用时,结构体大小是一个值(value),它告诉内核该结构体的大小,内核在写这个结构体时不会出现越界;当结构体返回时,结构体大小是一个结果(result),它告诉进程,内核在该结构体内存储了多少信息。这种类型的参数称为值-结果(value-result)参数。


3. 字节排序函数

小端存储与大端存储


网络协议必须指定一个网络字节序,有相应的函数在主机字节序以及网络字节序之间转换。

4. inet_ntop与inet_pton

这两个函数对IPv4和IPv6都适用。函数中的p和n分别代表表达(pretension)和数值(numerical)。地址的表达格式通常是ASCII字符串,数值格式是存放到套接字地址结构中的二进制值。

5. readn, writen, readline函数

字节流套接字上调用read或write输入或输出的字节数可能比请求的数量少,这并不是出错,而是可能因为内核中用于套接字的缓冲区到达了极限,此时调用者需要再次调用read或write函数,以输入或输出剩下的字节。
作者开发了readn, writen和readline
EINTER错误:表示系统调用被一个捕获的信号中断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值