Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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
C 使用UNIX套接字的原因是什么;零长度数据报;?_C_Linux_Sockets_Unix_Unix Socket - Fatal编程技术网

C 使用UNIX套接字的原因是什么;零长度数据报;?

C 使用UNIX套接字的原因是什么;零长度数据报;?,c,linux,sockets,unix,unix-socket,C,Linux,Sockets,Unix,Unix Socket,在手册页中,我发现在这种情况下,返回值可以为零: 不同域(如UNIX和Internet)中的数据报套接字 域)允许零长度数据报。当这样的数据报 接收时,返回值为0 在UNIX套接字交互通信中何时或为什么要使用零长度数据报?它的用途是什么?其中一个用途是在希望关闭UDP服务线程时取消对recvfrom()调用的阻止-设置“terminate”标志并在本地主机堆栈上发送零长度数据报。我昨天在研究另一个问题的答案时偶然发现了一个示例 在获取远程服务器当前时间的旧协议中,使用UDP的工作流如下所示: 通

在手册页中,我发现在这种情况下,返回值可以为零:

不同域(如UNIX和Internet)中的数据报套接字 域)允许零长度数据报。当这样的数据报 接收时,返回值为0


在UNIX套接字交互通信中何时或为什么要使用零长度数据报?它的用途是什么?

其中一个用途是在希望关闭UDP服务线程时取消对recvfrom()调用的阻止-设置“terminate”标志并在本地主机堆栈上发送零长度数据报。

我昨天在研究另一个问题的答案时偶然发现了一个示例

在获取远程服务器当前时间的旧协议中,使用UDP的工作流如下所示:

通过UDP使用时,时间服务的工作方式如下:
S:在端口37(45八进制)上收听。
U:向端口37发送一个空数据报。
S:接收空数据报。
S:发送一个数据报,其中包含32位二进制数形式的时间。
U:接收时间数据报。
服务器侦听端口37上的数据报。当一个数据报
到达时,服务器返回一个包含32位时间的数据报
价值如果服务器无法确定其站点的时间,则
应丢弃到达的数据报,不进行回复。

在这种情况下,由于UDP的无连接性质(TCP版本只需要连接到服务器),服务器必须接收一个数据报,以提醒用户正在请求时间(并知道向哪个地址发送回复)。该数据报的内容被忽略,因此最好指定它应该为空。

这是否仅适用于DGRAM套接字?或者这可以是具有
SOCK_-STREAM
SOCK_-SEQPACKET
的用户?这是否仅适用于DGRAM插槽?或者这可以是具有
SOCK\u流的用户
SOCK\u SEQPACKET