Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 实时操作系统上的UDP非阻塞套接字:sendto()和recvfrom()可以返回部分消息吗?_Sockets_Udp_Real Time_Recv_Sendto - Fatal编程技术网

Sockets 实时操作系统上的UDP非阻塞套接字:sendto()和recvfrom()可以返回部分消息吗?

Sockets 实时操作系统上的UDP非阻塞套接字:sendto()和recvfrom()可以返回部分消息吗?,sockets,udp,real-time,recv,sendto,Sockets,Udp,Real Time,Recv,Sendto,这是我在这里的第一条信息。 我正在使用实时操作系统(OnTime和VxWorks)上的非阻塞UDP套接字。 我已经阅读了文档和一些论坛,但对sendto()和recvfrom()函数的“原子性”有一些疑问: sendto()返回排队或出错的字节数。是否可能小于输入缓冲区长度?可能输出缓冲区没有足够的可用空间,只有几个字节排队 recvfrom()返回接收到的字节数或错误。它是否可能小于源发送的消息的大小?我的意思是部分信息阅读 我希望读写功能是原子的(完整消息或无消息读写) 谢谢。 伊曼纽尔

这是我在这里的第一条信息。 我正在使用实时操作系统(OnTime和VxWorks)上的非阻塞UDP套接字。 我已经阅读了文档和一些论坛,但对sendto()和recvfrom()函数的“原子性”有一些疑问:

  • sendto()返回排队或出错的字节数。是否可能小于输入缓冲区长度?可能输出缓冲区没有足够的可用空间,只有几个字节排队

  • recvfrom()返回接收到的字节数或错误。它是否可能小于源发送的消息的大小?我的意思是部分信息阅读

我希望读写功能是原子的(完整消息或无消息读写)

谢谢。 伊曼纽尔



我请求OnTime支持,他们告诉我,如果输出缓冲区没有足够的可用空间,sendto()可能会将部分消息排入队列。我不知道recvfrom()在某些情况下是否也可以返回部分消息。我认为不同操作系统之间的套接字实现没有标准行为

sendto()返回排队或出错的字节数。可能吗 它小于输入缓冲区的长度

不,它是完全发送的,或者根本不发送UDP

recvfrom()返回接收到的字节数或错误。它是 是否可能小于源发送的消息的大小? 我的意思是部分信息阅读

如果操作系统堆栈的缓冲区不能容纳整个UDP数据包,则会丢弃该数据包。如果您的应用程序缓冲区不能容纳整个数据包,那么您将获得数据包的初始内容


i、 e.您可以在一种情况下读取部分消息,即数据无法放入传递给sendto()的缓冲区。在这种情况下,数据包的其余部分将被丢弃。使用recvmsg()可以检测数据包是否被截断,但这通常可以通过使用最大大小的缓冲区(UDP必须适合MTU为2^16-1的IP数据包)或通过设计UDP内部使用的协议来解决,您可以在其中设置自己合理的最大大小。

我对这些系统不是很熟悉,但如果他们破坏了正常的UDP套接字语义,我会非常惊讶,通常是在“发送”时将完整的数据报排队,在“接收”时将完整的单个数据报排队。

只有使用.Steve,AFAIK,UDP Lite才是部分校验和。您能给我指出一些关于部分有效负载的参考吗?我向OnTime支持部门询问,他们告诉我,如果输出缓冲区没有足够的可用空间,sendto()可能会将部分消息排入队列。我不知道recvfrom()在某些情况下是否也可以返回部分消息。我假设不同操作系统之间的套接字实现没有标准行为。当被要求提供OnTime支持时,他们告诉我,如果输出缓冲区没有足够的可用空间,sendto()可能会将部分消息排入队列。我不知道recvfrom()在某些情况下是否也可以返回部分消息。我认为不同操作系统之间的套接字实现没有标准行为。