c++之socket,阻塞模式
这里描述下socket的阻塞模式:
首先,socket有几个函数
socket() 创建socket
bind() 绑定socket到一个地址
listen() 开启soket监听
accept() 接受别人来连接我,这个是个阻塞函数,一般服务器调用。
recv() 接受对方发过来的消息,这个也是阻塞函数,因为TCP要等对方把消息传递完整后再执行把消息从buff里面copy过来。这个客户端和服务器都要调用,注意~!!!!!
send() 发送消息
connect() 连接socket,一般是客户端。
上面accept和recv都是阻塞函数,要注意!!!
举例:
1、server开启后,会阻塞在accetp函数,等待别人连接。
2、client 1 开启connect ,然后立即返回,继续执行客户端的代码。此刻,server收到请求,继续执行server代码,一般连接成功后写recv函数,所以server阻塞在recv。
3、client
time client 1 client 2 server
1 accept,阻塞
2 connect后立即返回
3 收到client 1的con
4 执行recv,阻塞
5 connect
6 (收到client 2的连接,但是程序阻塞,所以排入队列)
7 send("c2")
8 (收到client 2的数据,但是程序阻塞,所以排入队列)
9 recv(),阻塞
10 send("c1"), 并recv()阻塞
11 收到client 1的数据c1,并send("hello c1 , im server")
12 收到数据("hello c1 , im server")通信完成
13 server执行完11步骤后,立即查看队列还有一个没处理,所以处理c2的连接,收到数据"c2",发送(“"hello c2 , im server"”)
14 收到数据(“"hello c2 , im server"”)通信完成
15 accept()阻塞
c++之socket,阻塞模式的更多相关文章
- Socket 阻塞模式和非阻塞模式
		阻塞I/O模型: 简介:进程会一直阻塞,直到数据拷贝 完成 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好. 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返 ... 
- Socket阻塞模式和非阻塞模式的区别
		简单点说: 阻塞就是干不完不准回来, 非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用send函数发送一定的Byte,在系 ... 
- Python Socket单线程+阻塞模式
		Python之旅]第五篇(二):Python Socket单线程+阻塞模式 python Socket单线程 Socket阻塞模式 串行发送 摘要: 前面第五篇(一)中的一个Socket例子其实就是 ... 
- UDP socket 设置为的非阻塞模式
		UDP socket 设置为的非阻塞模式 Len = recvfrom(SocketFD, szRecvBuf, sizeof(szRecvBuf), MSG_DONTWAIT, (struct so ... 
- socket异步通信-如何设置成非阻塞模式、非阻塞模式下判断connect成功(失败)、判断recv/recvfrom成功(失败)、判断send/sendto
		socket异步通信-如何设置成非阻塞模式.非阻塞模式下判断connect成功(失败).判断recv/recvfrom成功(失败).判断send/sendto 博客分类: Linux Socket s ... 
- NIO Socket非阻塞模式
		NIO主要原理和适用 NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有 事件发生时,他会通知我们 ... 
- 看到关于socket非阻塞模式设置方式记录一下。
		关于socket的阻塞与非阻塞模式以及它们之间的优缺点,这已经没什么可言的:我打个很简单的比方,如果你调用socket send函数时: 如果是阻塞模式下: send先比较待发送数据的长度len和套接 ... 
- socket缓冲区以及阻塞模式
		socket缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区. write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从 ... 
- 服务器编程心得(四)—— 如何将socket设置为非阻塞模式
		1. windows平台上无论利用socket()函数还是WSASocket()函数创建的socket都是阻塞模式的: SOCKET WSAAPI socket( _In_ int af, _In_ ... 
随机推荐
- sublime3中文乱码解决包ConvertToUTF8.zip
			把ConvertToUTF8.zip解压放到C:\Program Files\Sublime Text 3\Data\Packages中,重启sublime 3,按ctrl+shift+c即可解决中文 ... 
- HBase体系结构(转)
			HBase的服务器体系结构遵循简单的主从服务器架构,它由HRegion服务器(HRegion Server)群和HBase Master服务器(HBase Master Server)构成.HBase ... 
- [jQuery]html(),text(),val()方法的区别
			1.HTML html():取得第一个匹配元素的html内容.这个函数不能用于XML文档.但可以用于XHTML文档 html(val):设置每一个匹配元素的html内容.这个函数不能用于XML文档.但 ... 
- JavaScript基本语法
			本节和CSS语法类似,理解这些语法以后,就可以按照Bootstrap的开发规范去开发自己的各种插件了. ||和&&运算符 ||表示,如果第一个元素可以转换为true,则返回第一个元素的 ... 
- java 线程的堵塞
			//线程的阻塞 // //线程 class xc1 implements Runnable{ public void run(){ for(int i=1;i<=30;i++){ System. ... 
- Spark SQL External Data Sources JDBC官方实现读测试
			在最新的master分支上官方提供了Spark JDBC外部数据源的实现,先尝为快. 通过spark-shell测试: import org.apache.spark.sql.SQLContext v ... 
- bootloader制作过程
			主机环境:Ubuntu10.04.4 LTS 使用工具:buildroot-201208 目 标 板:S3C2410 --------------------------------------- ... 
- 有关RAVE报表 - 大富翁论坛20050419
			部分资料来源于RAVE开发人员指南 ravedevguide5 新闻组News.Nevrona.com RAVE的官方主页 www.nevrona.com/rave KeyLife富翁笔记 作者 ... 
- Flex 加载dxf
			因为已经写过加载dwg了,dxf应该不陌生,dxf是个开源格式,所以加载比较简单这里直接附上as的代码,但是真正使用场景还是比较少,dwg文件比较多 package widgetscadastre.S ... 
- Clustering with the ArcGIS API for Flex
			Clustering is an excellent technique for visualizing lotss of point data. We've all seen application ... 
