社区
网络编程
帖子详情
recvfrom 返回值为0的问题
xue23
2005-08-08 05:07:35
recvfrom返回值为0有两种情况。
1.socket已经"温和"关闭(使用shutdown或者设置linear属性)
2.对方发送一个空数据,也就是对方发送的数据长度为0。这时socket也就可以接收到的,并且recvfrom返回值为0。
现在如何区分这种情况呢?
...全文
2047
12
打赏
收藏
recvfrom 返回值为0的问题
recvfrom返回值为0有两种情况。 1.socket已经"温和"关闭(使用shutdown或者设置linear属性) 2.对方发送一个空数据,也就是对方发送的数据长度为0。这时socket也就可以接收到的,并且recvfrom返回值为0。 现在如何区分这种情况呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
newbiestar
2005-08-10
打赏
举报
回复
靠,都忘了这个是讨论什么的了……udp对方关闭没影响,不是tcp的……
newbiestar
2005-08-10
打赏
举报
回复
对方关闭socket也算关闭吧?对方当然知道,只不过你不知道而已……
softrain
2005-08-10
打赏
举报
回复
SOCKET是否关闭你自己还不知道吗?还需要发数据报来测试?
如果没有关闭,你发了空数据报,对方是不是也要发空数据报来测试是否已经关闭?这样就无限循环下去了。
xue23
2005-08-10
打赏
举报
回复
1。即使是我不发送0长度的数据,也会有其他人发送
2。当socket graceful关闭,recvfrom接收时也会返回0。
我想了一下,这样解决,可能有效。
如果recvfrom返回为0,我向对方发送一个长度不为0的数据,如果sendto返回值大于0,则此socket正常,否则说明socket已经关闭了。
xue23
2005-08-10
打赏
举报
回复
UDP实际是有连结的概念的,QQ的登录方式之一就是用UDP,你不能说此时QQ没有服务器连接。因为有时收到0长度的信息是有特别包含的,所以要作处理,简单的过滤掉是很低级的作法。
everandforever
2005-08-10
打赏
举报
回复
recvfrom 是针对UDP的。UDP下没有建立连接的概念,那么对方即使SHUTDOWN又怎么会通知你呢?既然是非连接的,为什么要把收到0字节拿出来特别处理呢?就直接过滤掉好了。
newbiestar
2005-08-09
打赏
举报
回复
填充不发生在tcp/ip协议这一块,到了对方那里会被以太网的协议栈剥离这些填充的内容的……
softrain
2005-08-09
打赏
举报
回复
在你的软件中不允许发送0字节的数据不就OK了。毕竟发送4字节和发送0字节数据都达不到以太侦的最小长度,系统都会在末尾补充字节的。
teli_eurydice
2005-08-09
打赏
举报
回复
up
softrain
2005-08-09
打赏
举报
回复
填充的数据长度会加上UDP头的长度写到UDP的头中的。以太侦自己填充的长度不会加到UDP的头中。
crystal_heart
2005-08-08
打赏
举报
回复
A发送0byte,B收到之后,发送0byte回去给A。
然后A再收到0byte,B收到之后,然后再次给A发送0byte。
以下从略
newbiestar
2005-08-08
打赏
举报
回复
你sendto一下,记得发送0个字节,然后检查返回值,如果是0,那么socket没有关闭,如果是SOCKET_ERROR的话,用WSAGetLastError看看什么错误,如果是WSAESHUTDOWN那么就说明关闭了
UDP 组播 vc 例子
组播主要有以下几个步骤:1. 建立支持数据报的scoket2. 把socket和本地的一个端口绑定(以后会通过这个端口进行数据的收发)3. 通过setsockopt IP_ADD_MEMBERSHIP加入一个组播组4. 然后就能通过sendto /
recv
from进行数据的收法5. 通过 setsockopt IP_DROP_MEMBERSHIP离开一个组播组6. 关闭socket如果你仅仅是想向一个组播组发送数据,而不要接受数据,那么可不用加入组播组,而直接通过sendto向组播组发送数据五.winsock 2组播 winsock 2组播主要是通过WSAJoinLeaf来实现的(WSAJoinLeaf的行为,
返回值
根据socket的模式,组播的实现构架有很大的关系) winsock 2组播的主要有以下几个步骤1. 建立支持数据报的socket(用WSASocket建立socket,同2. 时设置组播的一些属性)3. 把socket和本地的一个端口绑定(以后会通过这个端口进行数据的收发)4. 通过WSAJoinLeaf加入一个组播组5. 通过sendto /
recv
from进行数据的收发6. 直接关闭socket,7. 退出组播组
socket编程中select的使用
socket编程中select的使用Select在Socket编程中还是比较重要的,可是对于初学Socket的人来 说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、
recv
或
recv
from这样的阻塞程序(所谓阻塞方式 block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用 Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以
返回值
的不 同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高)方式工作 的程序,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。下面详细介绍一下!
socket编程:
recv
/send 和
recv
/
recv
from
返回值
及处理
1、
recv
和
recv
from =0 当
返回值
为0时,表示对端已经关闭了这个链接,我们应该自己关闭这个链接,即close(sockfd)。另外因为异步操作会用select或epoll做事件触发,所以: 1、如果使用select,应该使用FD_CLR(sockfd,fd_set)将sockfd清除掉,不再监听。 2、如果使用epoll,系统会自己将 ...
recv
from
问题
记录--
返回值
<=0狂打印
recv
from函数调用设置为非阻塞,设置的打印是异常的现象,导致子线程和主线程都挂掉了。
解决windows下UDP网络数据接收时
recv
from时
返回值
为 -1 但是缓冲区buffer有数据的
问题
引言 最近在windows下编写UDP网络服务器,用于接收来自Linux开发板发送过来的数据,遇到
返回值
-1 但是接收buffer中数据完整,本文介绍调试过程以及在调试过程中思路和方法。 一
问题
描述 windows作为UDP服务器端,Linux下作为客户端,windows下每次接收
recv
from接收的数据
返回值
都是-1,通过windows下Wireshark抓包发现程序已经完整的接收数据,并...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章