unix通信基本框架
来源:互联网 发布:三星游戏优化器 编辑:程序博客网 时间:2024/06/08 19:11
I/O模型
分类:
阻塞式I/O模型
非阻塞式I/O模型
I/O复用模型(select and poll)
信号驱动式模型(SIGIO)
异步I/O模型(POSIX 的aio_系列函数)
同步IO与异步IO对比
同步IO操作,导致请求进程阻塞,直到IO操作完成
异步IO操作,不导致请求进程阻塞
五中模型的比较:
非阻塞式IO ()
关于阻塞的一些基本知识:
套接字的默认状态时阻塞的。这意味着当发出一个不能立即完成的套接字调用时,其进程将被投入睡眠,等待其他操作完成。可能阻塞套接字的调用分为以下四类:
输入操作
包括read、readv、recv、recvrom、和recvmsg五个函数。如果某进程对一个阻塞的TCP套接字调用这些输入函数之一,而且该套接字的接受缓冲区没有数据可读,该进程将被投入睡眠,直到有数据到来。
TCP,唤醒条件:单字节或是完整的TCP分字节的数据;可设定等待固定数目的数据(readn、或者指定MSG_WAITALL)
UDP,唤醒条件:UDP数据报到来。
输出操作
包括write、writev、send、sendto、和senmsg五个函数。内核将从应用进程的缓冲区到该套接字的发送缓冲区复制数据。,对于阻塞的套接字,如果发送缓冲区不为空,,进程将被投入睡眠,直到有空间为止。
TCP,发送缓冲区不为空,立即返回WOULDBLOCK错误;发送缓冲区有部分空间,返回值是内核能够复制到该缓冲区的字节数。
UDP,不存在真正的发送缓冲区,内核只是复制应用进程数据并把它沿协议栈向下传送,并加上UDP、IP首部。
接受外来数据
Accept函数
阻塞套接字,调用accept,并且无新的连接到来,调用进程将被投入睡眠。
非阻塞式套接字,调用accept,并无新的连接到来,调用进程将返回一个WOULDBLOCK错误。
发起外出连接
用于TCP的connect函数。(UDP可用connect,但只是使内核保存对端的IP与端口号)
TCP,连接的建立涉及三路握手过程,connect要等到收到客户对SYN的ACK确认为止。所以,TCP每个connect都会阻塞进程至少一个RTT时间。
非阻塞TCP,调用connect时,连接不能立即建立时,连接的建立会照样发起,但会返回EINPROGRESS错误。
注,当服务器与客户处于同一个主机的情况下,即使对于非阻塞connect,connect也可能正常返回。
- unix通信基本框架
- 驱动通信基本框架的实例
- MultipeerConnectivity框架,近场通信的基本使用
- Unix 网络编程 之TCP程序基本框架
- Unix操作系统基础:Unix通信
- 【Unix】进程间通信
- UNIX通信机制
- unix socket通信
- unix进程通信
- Unix-进程间通信
- UNIX网络通信
- 【UNIX】进程间通信
- unix进程通信
- UNIX下的通信
- Unix操作系统基础2-Unix通信
- Unix基本命令
- unix 基本操作
- UNIX 文件系统基本操作
- Jenkins进阶系列之——01使用email-ext替换Jenkins的默认邮件通知
- 今年夏天格外的热
- libcurl教程
- Could not find result map JxjlcMapper.JxjlcModelResult
- Matcher匹配器中的方法!
- unix通信基本框架
- C语言--分支结构
- 可变长度子网掩码和无类域间路由
- python 3.x网络爬虫 下载图片
- ecshop 添加左侧菜单
- UVa658 - It's not a Bug, it's a Feature!
- windbg小结
- 算法竞赛入门经典 第五章 字母重排
- spring3+mbatis3开发实例