Unix网络编程卷一(笔记3)

来源:互联网 发布:贺福初是谁的女婿知乎 编辑:程序博客网 时间:2024/05/16 20:59

13章:

1.守护进程和如何把一个进程变为守护进程


14章:

1.高级I/O函数: 

2.套接字超时 1. alarm信号 2.select 内部的超时 3.socket套接字选项so_rcvtimeo的超时

3.readv writev 读入或者写入到多个缓冲区;recvmsg sendmsg这两个是最通用的,因为他们可以代替recv read readv recvfrom send sendto write writev.其实呢功能都是一样,只是功能概况了这几个(貌似,我的猜测)我也懒得去详看,用到再研究也不迟。同时这两个冬瓜也可以查看辅助数据:即一些控制信息。page311

4.如果我们想查看排队的数据量,但并非想去取数据,设置MSG_PEEK标志。貌似设置之后的recv返回的是数量,并不读取数据,不指定该标志,则读取数据咯。


15章:Unix域协议

1.也就是本地socket的程序通信。本地to本地。

2.描述符的传递:除了fork,exec,系统还提供一种用于从一个进程向任一其他进程传递一打开的描述符的方法,要求在2进程之间创建一个Unix域套接字,然后使用sendmsg跨这个套接字发送一个特殊消息。这个消息由内核来专门处理,会把打开的描述符从发送进程传递到接收进程。

因为每个进程间有自己的进程空间,所以在两个进程间传递描述符比较负责,这属于高级进程间通信级别咯。

http://www.doc88.com/p-886680853100.html

 1.引用计数加1  2.该描述符需要使用辅助数据传递 3.

进程间传递文件描述符是一个很微妙的问题,就像dup系统调用一样,在一个
进程中复制文件描述符,看起来不可思议,可现实中就是有这样的需求,而且
有时候还非此不可,可见,理性有时候确实不能过分依赖。对于进程间传递文件
描述符我们可以看作跨进程的dup调用,也就是同一个核心实体在不同进程间
的映射,这和两个进程打开同一个文件的结果相同,只是接受文件描述符的进程
少了open的步骤而已,而对于网络接口返回的描述符,也只能采取传递文件
http://wenku.baidu.com/view/7a8a522158fb770bf78a55cf.html


8.辅助数据不仅可以传递描述符,也可以传递用户凭证。

当客户服务器通信时,服务器通常需要以一定手段获悉客户的身份,以便验证客户是否有权限请求相应服务。

不过用户凭证还木有真正的被标准化。


16章:非阻塞式I/O, send recv connect accept

1.想等到某个固定数目的数据可读为止,我们可以调用readn或者设置msg_waitall标志。

读操作:read readv recv recvfrom recvmsg

写操作:write, wiret send , sendto ,sendmsg

* 非阻塞的需求:程序不断有东西进来,而且有东西要出去,那么进来或者出去默认都会被阻塞,如果进出或者出去阻塞了,那么万一有东西要出去却被进来堵死了道路;相反,为了我们这两个需求都能够有效率的工作,防止进程在可做有效工作期间发生阻塞在某地方。

如果进程只有一个需求,那么也就没必要改成非阻塞咯;如果有事情要做,非阻塞还行的。

2.非阻塞的connect()3个用途:

 1.3路握手时间的消耗我们能够做其他的事情,而不必阻塞在这里。

 2.使用这个技术可以同时打开多个链接:Web浏览器

 3.如果迟迟链接不上,我们可以设置超时。如果你需要更短的时间超时,就使用非阻塞connect:如下

    1.我们可以控制sockfd是某个期间为阻塞或者为非阻塞状态,比如在connect期间设置为非阻塞,connect成功后,又用fcntl设置为阻塞的。在recv时候设置为阻塞的,完了又设置为非阻塞的。

    2.非connect的会带来移植性的问题,因为connect不是标准滴。



17章:ioctl操作


原创粉丝点击