社区
C语言
帖子详情
send函数返回EAGAIN问题
树先生
2010-01-10 10:22:52
在使用socket时 send()返回的是成功copy到socket缓冲区的数据大小
如果返回-1的话 我查了一下 好像是socket缓冲区剩余空间大小小于要发送的数据长度 也可以说缓冲区满了
那如果我这边缓冲区没满 而接收方的缓冲区满了 send()应该返回什么呢
我这边返回的异常信息是EAGAIN
请大家帮忙指点!
...全文
1509
5
打赏
收藏
send函数返回EAGAIN问题
在使用socket时 send()返回的是成功copy到socket缓冲区的数据大小 如果返回-1的话 我查了一下 好像是socket缓冲区剩余空间大小小于要发送的数据长度 也可以说缓冲区满了 那如果我这边缓冲区没满 而接收方的缓冲区满了 send()应该返回什么呢 我这边返回的异常信息是EAGAIN 请大家帮忙指点!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cattycat
2010-01-10
打赏
举报
回复
接收数据从tcp的缓冲拷到socket的缓冲区,你的socket缓冲区大小要大于接收的数据长度才能接收成功。你可以试一下接收缓冲小于发送的数据大小,看返回什么结果。
cattycat
2010-01-10
打赏
举报
回复
send底层的缓冲区是tcp协议负责处理的,一般不用处理,send成功的话返回发送的字节数,tcp实现的重传不需要你来显示调用send。
猫已经找不回了
2010-01-10
打赏
举报
回复
换句话说, send只要数据从自己缓冲区发出去了,它就返回发送的字节数,认为成功,至于保证对方收到,是tcp协议决定,重发也用不上你重新来个send.
猫已经找不回了
2010-01-10
打赏
举报
回复
[Quote=引用楼主 xxrlily 的回复:]
在使用socket时 send()返回的是成功copy到socket缓冲区的数据大小
如果返回-1的话 我查了一下 好像是socket缓冲区剩余空间大小小于要发送的数据长度 也可以说缓冲区满了
那如果我这边缓冲区没满 而接收方的缓冲区满了 send()应该返回什么呢
我这边返回的异常信息是EAGAIN
请大家帮忙指点!
[/Quote]
1.你自己的缓冲区满了,会返回EAGAIN。
2.你的没满,对方的缓冲区满了,肯定不关你事,可能会发送不成功,但是协议栈提供的系统调用,只管数据成功从你的缓冲区发出去,之后人家因为缓冲区满收不到数据,tcp自己有重传机制(参考Tcp/ip详解卷1)。
http://hi.baidu.com/newnlcloud/blog/item/c251b835c88dbf315bb5f5fa.html
东大坡居士
2010-01-10
打赏
举报
回复
这个我感觉就不用考虑了吧,这个应该是接收方考虑的,接收方的缓冲区和send的缓冲区应该有同步控制的
Socket的
send
函数
在执行时报
EAGAIN
的错误
Socket的
send
函数
在执行时报
EAGAIN
的错误] 内容提要: 当客户通过Socket提供的
send
函数
发送大的数据包时,就可能
返回
一个EGGAIN的错误。该错误产生的原因是由于
send
函数
中的size变量大小超过了tcp_...
send
函数
何时
返回
send
函数
是将应用程序请求发送的数据拷贝到发送缓存中发送并得到接收端的确认后再
返回
2 在非阻塞模式下,
send
函数
仅仅是将数据拷贝到协议栈的缓存区而已,如果缓存区可用空间不够,则尽能力的拷贝,
返回
成功拷贝的...
recv
函数
和
send
函数
返回
值错误处理
本文中分析的都是非阻塞态的socket错误代码,因为阻塞态也不会出现EWOULDBLOCK...当socket设置为非阻塞的时候,recv
返回
错误时才会有errno==EWOULDBLOCK||errno==
EAGAIN
两种情况; #define EWOULDBLOCK
EAGAIN
......
linux下使用write\
send
发送数据报
EAGAIN
: Resource temporarily unavailable 错
linux下使用write\
send
发送数据报
EAGAIN
: Resource temporarily unavailable 错 首先是我把套接字设置为异步的了,然后在使用write发送数据时采取的方式是循环发送大量的数据;由于是异步的,write\
send
将要发送的...
FFmpeg 基本API avcodec_
send
_packet
函数
内部调用流程分析
avcodec_
send
_packet 是 FFmpeg 多媒体处理框架中的核心
函数
,属于其解码 API 的关键组成部分。其主要功能是解码器输入
函数
:负责向解码器提交压缩数据包(AVPacket),现代解码 API 核心:取代旧版 avcodec_decode_...
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章