在Linux下面,异步Socket,Send了以后,不判断返回值马上Close,会不会发送成功?

iorikingdom 2010-02-26 09:47:44
版本是
Redhat 4.3
Linux cbsserver-1 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:54:53 EST 2006 i686 i686 i386 GNU/Linux

好像我测试的结构是Send了以后,马上关闭的话,会出问题,发送好像不完整,不知道是不是事实


...全文
915 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxb_champagne 2010-03-12
  • 打赏
  • 举报
回复
我做一个SuSE的服务端程序,与Windows Mobile的手机通讯。
我在服务端Send之后,马上Close了,结果手机有时候能接收到消息,有时候不能接收到消息。
liangchencf 2010-03-08
  • 打赏
  • 举报
回复
调用Send后必须要判断返回值,不管是阻塞模式还是非阻塞模式。
风声边界 2010-03-07
  • 打赏
  • 举报
回复
引用 2 楼 feiyinzilgd 的回复:
应该是LS说的这个道理。

一般都会监测这个返回值的。

对于非堵塞的socket send函数的返回值是不是与堵塞socket的send返回值一致哪?(直到数据写入到缓冲区才返回)

有人说,非堵塞 recv时如果没有数据可读立即返回,如果有数据可读的话同堵塞的socket recv就一样了
是这样不?
leemeng0x61 2010-03-04
  • 打赏
  • 举报
回复
楼上是你太不厚道了,占用别人的帖子问问题
smile89haha 2010-03-04
  • 打赏
  • 举报
回复
会用Linux的朋友:我在虚拟机下安装了Ubuntu,也装了wine,可是我要运行或安装windows下的软件怎么办呢?刚从windows转到Linux这边,所以都不怎么会啊!请教一下~~~~~~~~O(∩_∩)O谢谢
BuleRiver 2010-03-02
  • 打赏
  • 举报
回复
异步socket和非阻塞socket有什么不同?
在其他平台上,是否也有类似的概念和异同?
mymtom 2010-03-02
  • 打赏
  • 举报
回复
对TCP来说send成功,表示系统已将数据放入TCP发送缓冲区。
随后的close对发送缓冲区中残留数据的处理与SO_LINGER选项有关
http://www.cnblogs.com/rainbowzc/archive/2009/09/14/1566151.html
  • 打赏
  • 举报
回复
send操作成功,代表,数据已经存到发送方的缓冲区。
既然你连send的返回值都不判断,当然可能出错。

mymtom 2010-03-01
  • 打赏
  • 举报
回复
引用 4 楼 guosha 的回复:
看描述应该是Non-Blocking IO

也有可能是错误地设置了socket的linger选项
快乐田伯光 2010-02-26
  • 打赏
  • 举报
回复
看描述应该是Non-Blocking IO
blackbillow 2010-02-26
  • 打赏
  • 举报
回复
你确信你使用的是Asynchronous IO,还是Non-Blocking IO?
谭海燕 2010-02-26
  • 打赏
  • 举报
回复


应该是LS说的这个道理。

一般都会监测这个返回值的。
快乐田伯光 2010-02-26
  • 打赏
  • 举报
回复
send的动作是把数据拷到发送缓冲区,close动作会刷新该socket关联的发送缓冲区。如果你发一小块,然后close的话,应该是可以发送出去的,如果你频繁发送大数据,导致发送缓冲区满了的话,缓冲区已经没有空间可供数据拷贝,所以导致数据没有发送出去。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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