在Windows 异步Socket中编程,如果send时,返回WSAWOULDBLOCK,意味着什么?

zhaoyao73 2002-08-22 08:38:31
有什么可能原因?
难道是服务器忙不过来,造成客户端阻塞?注意我是非阻塞模式!还是其它问题?
...全文
195 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoyao73 2002-08-23
  • 打赏
  • 举报
回复
谢谢,交个朋友吧!
hohoo 2002-08-22
  • 打赏
  • 举报
回复
因为你是非阻塞调用。例如当进程调用recv读取数据时,若套接字缓冲区没有数据,recv就立即返回错误,错误类型就是EWOULDBLOCK。表示套接字本该阻塞,但由于套接字工作在非阻塞方式,所以立即返回了。
xuying 2002-08-22
  • 打赏
  • 举报
回复
发送端的缓冲区已满,暂时无法发送。
hohoo 2002-08-22
  • 打赏
  • 举报
回复
非阻塞方式的send()调用,和recv()差不多,若套接字没有空闲的空间放用户的数据,则send()函数也是立即返回,错误类型也为EWOULDBLOCK。另外非阻塞方式有时需多次调用send(),确保全部数据被写进套接字缓冲区。

CAsyncSocket,当出现WSAEWOULDBLOCK时,必须等待FD_WRITE事件才能继续发送,系统会触发FD_WRITE事件。你可在该事件处理中,将剩余的包发出去。

CAsyncSocket是异步方式,如果要确保所有的数据发送出去,建议选择CSocket。

zhaoyao73 2002-08-22
  • 打赏
  • 举报
回复
为什么发送端的缓冲区已满,暂时无法发送?原因是什么?
对于CAsyncSocket怎么判断缓冲区满?什么时候可以发送?似乎OnSend只第一次有效。

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧