阻塞方式下send函数返回值的问题? ( 积分: 100 )

  • 主题发起人 主题发起人 askyou
  • 开始时间 开始时间
A

askyou

Unregistered / Unconfirmed
GUEST, unregistred user!
按书上所讲阻塞方式下,使用send函数如果因为socket的缓冲区比欲发送的字节数小时,就会产生阻塞,那我的理解是send函数的返回值就只有两种情况
1、返回出错。(由于远程链路掉线或者其他原因)
2、返回的结果等于欲发送的字节数。
不知道我的理解对不对?
还是会出现象非阻塞方式下的,返回值是实际发送的长度?可能小于欲发送的字节数
注:用TCP连接时
 
不知道对 Socket 阻塞与阻塞模式 的理解是否正确?

Socket 阻塞 通常是指SendBuffer满了,即发送数据时遇到 getWsaLastError = WSAEWOULDBLOCK. 这时需要继续发送的话必须等待 FD_WRITE消息.

阻塞模式的Socket,是一步一步往下执行的,一般用另一个线程来执行。
而非阻塞模式的Socket,是消息驱动的。同样是执行Socket->Active=true;但是 你不能在下面马上用Socket进行读写。你必须在事件OnConnect出现后,才可以用Socket发送数据。而要读数据,你必须在事件OnRead里写代码读数据读到数据后,当然也可以再用Socket发送数据。

关于你的问题:
使用send函数如果因为socket的缓冲区比欲发送的字节数小时.将返回实际发送的字节.错误值例外.
 
頂。。。。。。。。。。
 
MSDN里提到的,只提到非阻塞方式下,send涵数返回值要么出错,要么可能介于1到request length之间.
 
在这种情况下要不要考虑超时?
 
后退
顶部