UDP Socket 关闭操作请教

everysmile 2013-03-14 08:03:44
Hi:all:
请教一个问题,请指教:
创建一个Udp Socket(例如为gSocket),完成了一次发包以及相应的收包,然后就关闭了套接字(close(gSocket))。
后续,在这个gSocket上依然可以发包成功(sendto),但是却无法收包(recvfrom)。所以请教一下,对于Udp类型的socket的close操作实现了什么效果:为什么关闭后,可以依旧在这个socket上发包成功,但是收包却失败呢,请高手指教。

编程环境为(linux suse) & g++
...全文
1157 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
JoeBlackzqq 2013-03-15
  • 打赏
  • 举报
回复
引用 4 楼 everysmile 的回复:
引用 2 楼 JoeBlackzqq 的回复:我是这样理解的,发出去只是从本地发出去成功了,并不表示到达目的的,且对方接收成功。 就好像我本来是要去汽车南站的,我从家里出去了,但是并不表示我一定能到达南站呀,假如迷路或....。 所以发送成功与接收成功完全是两个相互独立的事件,并没有任何必然联系。 多谢回复,现在测试的结果是: 包成功发出去了,对方也成……
具体实现了什么,我也没有研究过。你只要保证程序的逻辑是正确的就好了,太细的不需要研究。 按正常操作步骤来就好了。
woaishuo2011 2013-03-15
  • 打赏
  • 举报
回复
close只是回收文件描述符资源,但并不会将socketfd清0,所以sendto函数是可以返回的,但是socket链接已经断开了,无法将数据发送出去.个人理解...
everysmile 2013-03-15
  • 打赏
  • 举报
回复
引用 2 楼 JoeBlackzqq 的回复:
我是这样理解的,发出去只是从本地发出去成功了,并不表示到达目的的,且对方接收成功。 就好像我本来是要去汽车南站的,我从家里出去了,但是并不表示我一定能到达南站呀,假如迷路或....。 所以发送成功与接收成功完全是两个相互独立的事件,并没有任何必然联系。
多谢回复,现在测试的结果是: 包成功发出去了,对方也成功收包解包,但是对方的回包回来时,本地收包失败。所以想请教下: 对于UDP类型的socket,close(isocket)操作详细实现了什么目的?
JoeBlackzqq 2013-03-15
  • 打赏
  • 举报
回复
另外,UDP是不可靠传输,并不保证发出去的数据一定会到达目的的的
JoeBlackzqq 2013-03-15
  • 打赏
  • 举报
回复
我是这样理解的,发出去只是从本地发出去成功了,并不表示到达目的的,且对方接收成功。 就好像我本来是要去汽车南站的,我从家里出去了,但是并不表示我一定能到达南站呀,假如迷路或....。 所以发送成功与接收成功完全是两个相互独立的事件,并没有任何必然联系。
woaishuo2011 2013-03-15
  • 打赏
  • 举报
回复
你确定close socketfd 后在发送数据服务器端还能接受到数据?你在close后面加个延时函数试试,然后在发送数据,看看服务器端还能接受到数据么? 我测试着这包数据没有到达服务器端.
everysmile 2013-03-15
  • 打赏
  • 举报
回复
[quote=引用 5 楼 woaishuo2011 的回复:] close只是回收文件描述符资源,但并不会将socketfd清0,所以sendto函数是可以返回的,但是socket链接已经断开了,无法将数据发送出去.个人理解...[/q] UDP的程序没有断开链接的说法吧,而且我现在测试的结果是: sendto不光返回成功,包还正确的到了目的地,只是recvfrom没有成功的接收目的地返回的包。
云满笔记 2013-03-14
  • 打赏
  • 举报
回复
Linux下面的不知道 WIndows下面closesocket(gSocket)之后还有两个操作: 1. closehandle(handle) // 关闭句柄 2. WSACleanup() // 把DLL清出去

23,121

社区成员

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

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