关于linux c socket send()recv()的问题

xiaoyuaccp 2010-04-14 03:57:46
问题1 socket断开后(包括服务端主动断开或网络原因断开)再send()会不会溢出
问题2 int a=recv()返回int =0或int=-1代表什么意思
谢谢
...全文
488 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wesleyluo 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaoyuaccp 的回复:]
引用 3 楼 huatian008 的回复:
引用 2 楼 xiaoyuaccp 的回复:
别来误导我

楼主给我们讲讲呗

现在我测试的结果是 socket断开后再send()会溢出 recv return 0是socket已断开 -1不知道是什么情况 请高手给讲下啊
[/Quote]
我也在学习
关于recv()的返回值,书上是这样定义的,返回实际读取的字符数目;当返回值为-1时表示发生错误。
返回值为0的时候就表示断开了,因为你没有读到数据。
不明白你的服务器主动断开的时候,你就已经没有sock了,怎么还可以send()呢?不会出错吗?
xiaoyuaccp 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hairetz 的回复:]
引用楼主 xiaoyuaccp 的回复:
问题1 socket断开后(包括服务端主动断开或网络原因断开)再send()会不会溢出
问题2 int a=recv()返回int =0或int=-1代表什么意思
谢谢


1.如果是长连接,一般用心跳包来监听对面是否断开。若断开后,第一次调用send,数据应该会写入缓冲区,我不觉得会溢出,你说的溢出是啥意思。但是之后,再send应该就会返回失……
[/Quote]
溢出就是堆栈溢出 断开后第一次send()的确没有益处,第二次在send()就溢出了
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
2.这个看你是阻塞模式,还是非阻塞模式。

以前有位GG已经想的很详细了,可以参考

http://topic.csdn.net/u/20090428/13/4fd54186-d70a-4ff7-9b57-4af83f225e90.html
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiaoyuaccp 的回复:]
问题1 socket断开后(包括服务端主动断开或网络原因断开)再send()会不会溢出
问题2 int a=recv()返回int =0或int=-1代表什么意思
谢谢
[/Quote]

1.如果是长连接,一般用心跳包来监听对面是否断开。若断开后,第一次调用send,数据应该会写入缓冲区,我不觉得会溢出,你说的溢出是啥意思。但是之后,再send应该就会返回失败了。

xiaoyuaccp 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huatian008 的回复:]
引用 2 楼 xiaoyuaccp 的回复:
别来误导我

楼主给我们讲讲呗
[/Quote]
现在我测试的结果是 socket断开后再send()会溢出 recv return 0是socket已断开 -1不知道是什么情况 请高手给讲下啊
huatian008 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaoyuaccp 的回复:]
别来误导我
[/Quote]
楼主给我们讲讲呗
xiaoyuaccp 2010-04-14
  • 打赏
  • 举报
回复
别来误导我
AlanBruce 2010-04-14
  • 打赏
  • 举报
回复
1、失败了。

2、0代表成功。-1代表出错

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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