社区
C语言
帖子详情
send函数返回EAGAIN问题
树先生
2010-01-10 10:22:52
在使用socket时 send()返回的是成功copy到socket缓冲区的数据大小
如果返回-1的话 我查了一下 好像是socket缓冲区剩余空间大小小于要发送的数据长度 也可以说缓冲区满了
那如果我这边缓冲区没满 而接收方的缓冲区满了 send()应该返回什么呢
我这边返回的异常信息是EAGAIN
请大家帮忙指点!
...全文
1527
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的缓冲区应该有同步控制的
linux非阻塞的socket
EAGAIN
的错误处理
本文详细探讨了在Linux环境下使用非阻塞socket时可能出现的
问题
及其解决办法,包括发送和接收数据过程中遇到
EAGAIN
错误的原因及处理策略,并提供了一个用于处理
send
函数
返回
EAGAIN
错误的示例
函数
。
send
msg
返回
值_
send
返回
值
在Unix系统中,当
send
、recv或write遇到socket被shutdown时,进程会收到SIGPIPE信号,默认处理是进程终止。忽略SIGPIPE信号可以避免此
问题
,此时
函数
将
返回
-1,errno为EPIPE。此外,非阻塞socket编程中常遇到
EAGAIN
错误,表示操作未完成,通常在循环中继续尝试recv。EINTR表示被中断的系统调用,也应继续操作。recv
返回
0表示连接断开。大数据包发送可能
返回
EAGAIN
,可通过增大tcp_
send
space或设置SNDBUF解决。
[转] - linux下使用write\
send
发送数据报
EAGAIN
: Resource temporarily unavailable 错
本文探讨了Linux环境下非阻塞Socket编程的关键
问题
,包括如何处理write/
send
时出现的
EAGAIN
错误、非阻塞connect的正确实现方式、
send
/recv
函数
的
返回
值解读以及close/socket后的
send
/recv行为。此外,还提供了详细的代码示例和解决方案。
send
函数
详解
本文详细解析了
send
函数
在套接字编程中的应用,包括
send
、
send
to和
send
msg的区别与联系,参数含义及
返回
值说明,适用于系统调用的学习与实践。
recv
函数
和
send
函数
返回
值错误处理
本文深入解析非阻塞状态下的socket错误代码,重点分析recv和
send
函数
在非阻塞模式下如何处理EWOULDBLOCK和
EAGAIN
错误。通过示例代码展示如何在非阻塞模式下正确实现数据的接收和发送,避免因数据未准备好而导致的阻塞。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章