包裹函数 就是对有错误返回值的函数的封装。在unix网络编程中用大写表示。
err_sys 必须要errno 的值才能输出错误?
线程函数遇到错误的时候 不设置errno的值,而是把error的值作为函数的返回值。
必须检查某个确定的错误,并处理它,而不是终止进程运行。
Unix errno 值 : 每当一个unxi函数中发生错误的时候,全局变量将被设置成一个指示消息类型的正数,函数本身通常返回-1
。err_sysy 检查errno 变量 并输出其相应的出错信息。值0 表示无错误。errno的值 只在函数发生错误的时候设置。如果函数
不返回错误。errno的值就无法确定。具有以E打头的全大写字母名称。把errno存放全局变量,不适合共享全局变量的多线程。
地址转换函数 就是把地址的文本表达转化成套接口地址结构中的二进制。如 inet_addr、inet_ntoa.转化函数是协议相关的。一个较好的技术是把套接口地址
结构作为不透明对象来操作。做到与协议无关。
网络字节序 和主机字节序。TCP在套接口地址结构中总是以网络字节序来存储。
套接口地址总是通过指针来传递,通过指针来取得此参数的套接口函数必须 处理所支持的任何协议族的套接口地址结构。
遇到的问题:如何声明指针类型: ANSI C 中有简单的解决办法,通过指针类型void*。 但是套接口函数实在ANSI C 之前定义的,所以
定义了一个通用的套接口地址函数。
所以 在一些套接口函数中要做类型转换。
如: int bind( int,struct sockaddr* ,socklen_t ) socklen_t 是无符号32位整形类型。
套接口地址分为 四种: ipv4(固定长度) ipv6(固定长度) unix域(可变长度)、 数据链路结构(可变长度)。
套接口地址传递方式 取决于传递方向: 是从进程传递给内核,还是从内核传递给进程。
问题:为什么从内核到进程传递套接口函数的时候,参数是指针,而不用整数?
因为是值——结果参数。结构的大小,是为了防止越界。
套接口函数 与 内存中的协议栈接口。
字节排序函数:
16位整数 , 由2个字节组成,低序字节存储在起始地址,称为小端字节序。高序字节存储在起始地址,称为大端字节序。
因为小端字节序 和大端字节序的格式 都有系统使用,把某给定系统所使用的字节序 称为主机字节序。
判断主机字节序的程序。
字节序转换函数。
htons s看成16位端口号、 l 看成32位 ip 地址。
主要看基本socket连接。
会什么要求转研发:
unix网络编程、(2个月)配置文件读取。内存分配、tcp、ip互联网连接。(2个月)设计模式。(1个月)工作中遇到的问题。服务器架构。
判断服务器性能、稳定的条件。汇编。
加密、解密算法。压缩、解压缩算法。UML。
对一些东西的要求是理解原理、知道应用。
压缩、解压缩、 服务器同步负载。