socket缓存的研究

来源:互联网 发布:js设置div display 编辑:程序博客网 时间:2024/05/24 02:31

工作期间遇到过socket缓存相关的一些问题,有做相关的测试,也有一些比较浅显的体会,今天突然看到下面这篇帖子,是基于windows的socket buffer的,看了下觉得自己当时的理解有点偏,也不确定这里说的是否完全正确,赶紧收藏了,以提醒自己有时间了集中研究一下。

将持续更新!


以下转载自【http://www.cnblogs.com/dawen/archive/2011/05/18/2050330.html】

关于socket的阻塞与非阻塞模式以及它们之间的优缺点,这已经没什么可言的;我打个很简单的比方,如果你调用socket send函数时;

如果是阻塞模式下:

send先比较待发送数据的长度len和套接字s的发送缓冲的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR;如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么 send就比较s的发送缓冲区的剩余空间和len,如果len大于剩余空间大小,send就一直等待协议把s的发送缓冲中的数据发送完,如果len小于剩余空间大小send就仅仅把buf中的数据copy到剩余空间里

如果是非阻塞模式下:

在调用socket send函数时,如果能写到socket缓冲区时,就写数据并返回实际写的字节数目,当然这个返回的实际值可能比你所要写的数据长度要小些(On nonblocking stream oriented sockets, the number of bytes written can be between 1 and the requested length, depending on buffer availability on both the client and server computers),如果不可写的话,就直接返回SOCKET_ERROR了,所以没有等待的过程

0 0
原创粉丝点击