unix网络编程-十五,十六章-小结

15.

unix域协议是在单个主机上执行客户/服务器通信的一种方法,所用的API就是在不同主机上执行客户/服务器通信所用的API

unix域套接字通常比通信两端位于同一个主机的TCP套接字快出一倍

unix域套接字可用于在同一个主机上的不同进程之间传递描述符

unix域套接字较新的实现把客户的凭证(用户ID和组ID)提供给服务器,从而能够提供额外的安全检查措施。

socketpair创建两个随后连接起来的套接字

由bind创建的路径名默认访问权限是一个绝对路径名

描述符传递:

fork调用返回后,子进程共享父进程的所有打开的描述符

exec调用执行后,所有描述符通常保持打开状态不变

用sendmsg跨套接字发送特殊消息,这个消息由内核来专门处理,会把打开的描述符从发送进程传递到接收进程。

socketpair创建一个可用于在父子进程之间交换描述符的流管道

新描述符和发送进程中飞行前的那个描述符指向内核中相同的文件表项

unix域字节流套接字的优势体现在性能的增长上。

16.

如果想等到某个固定数目的数据可读为止,那么可以调用我们的readn函数,或者指定MSG_WAITALL

对于非阻塞的套接字,如果输入操作不能被满足,相应的调用将立刻返回一个EWOULDBLOCK错误

非阻塞connect会返回一个EINPROGRESS错误

每当我们发现要用非阻塞I/O时,更简单的方法通常是把应用程序任务划分到多进程或多线程

POSIX:每当连接成功建立时,描述符变为可写。遇到错误时,描述符变为既可读又可写。

判断连接是否成功:

1.调用getpeername代替getsocketopt

2.以值为0的长度参数调用read

3.再connect一次。

避免移植性的一个较简单的技术是为每个连接创建一个处理线程。

对于被中断的connect,只能调用select

select通常结合非阻塞I/O一起使用,以便判断描述符何时可读可写。

 

 

 

你可能感兴趣的:(unix网络编程-十五,十六章-小结)