linux - SOCK_DGRAM 和 SOCK_STREAM 在上下文 AF_UNIX 套接字中的用途是什么?

标签 linux sockets ipc

据我了解,SOCK_DGRAM 和 SOCK_STREAM 对应于使用 INET 地址系列完成的无连接和面向连接的网络通信。

现在我正在尝试学习 AF_UNIX 套接字以在同一主机上运行的进程之间执行 IPC,并且我看到我们需要将 sub_socket_type 指定为 SOCK_DGRAM 或 SOCK_STREAM。对于 AF_UNIX 套接字,我无法理解指定子套接字类型的目的是什么。

谁能帮助理解 SOCK_DGRAM 和 SOCK_STREAM 在 AF_UNIX 套接字上下文中的重要性?

最佳答案

碰巧 TCP 既是一种流协议(protocol),又是面向连接的,而 UDP 是一种数据报协议(protocol),而且是无连接的。然而,有可能有一个面向连接的数据报协议(protocol)。这就是 block 特殊文件(或 Windows Mailslot)。

(你不能有一个无连接的流协议(protocol),它没有意义,除非 /dev/null 算)

SOCK_DGRAM 标志并不表示套接字是无连接的,它表示套接字是面向数据报的。

面向流的套接字(以及字符特殊文件,如/dev/random 或/dev/null)提供(或使用,或两者)连续的字节序列,没有固有结构。通过解释流的内容来提供结构。一般来说,流的两端只有一个进程。

一个面向数据报的套接字,提供(或消费或两者)大小有限且自包含的短消息。一般来说,服务器可以使用 recvfrom(它为调用者提供一个发送回复的地址)从多个客户端接收数据报,并使用指定该地址的 sendto 回复它们。

关于linux - SOCK_DGRAM 和 SOCK_STREAM 在上下文 AF_UNIX 套接字中的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51008595/

相关文章:

linux - 如何在系统启动时保持运行chmod

java - 为什么我无法捕获 java.net.SocketTimeoutException?

c++ - C++ IPC通讯

java - 从 Java 使用 shmget() 访问在 C 中创建的共享内存

python - 如何将 Python 进程的输出重定向到 Rust 进程?

linux - 如何使用 sed 只替换第一次出现的地方?

c++ - 如何在 bleeding edge linux 上编译程序以在旧 linux 上运行

linux - 构建uchar.h文件和ICU版本相关的训练工具时出现Tesseract错误

python - 接收器的scapy?

javascript - 如何在 socket io 中向单个客户端发送错误数据包?