- 论坛徽章:
- 0
|
http://bbs.chinaunix.net/thread-1380350-1-1.html这个帖子里有这样一段话:
在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的那部分数据,并等待对端确认后再返回(接收端只要将数据收到接收缓存中,就会确认,并不一定要等待应用程序调用recv);
在非阻塞模式下,send函数的过程仅仅是将数据拷贝到协议栈的缓存区而已,如果缓存区可用空间不够,则尽能力的拷贝,返回成功拷贝的大小;如缓存区可用空间为0,则返回-1,同时设置errno为EAGAIN.
====================================================
这就好理解了,我用的是非阻塞send,缓冲区在满之前返回值都是对的,这就是为什么在网络断连后send还是返回正确值。楼上说检查网络状态只针对网线拔掉的情况。如果网线没断开,而是因为其他原因导致断连,我该怎么判断呢?
|
|