gpt4 book ai didi

linux - 为什么 socketpair() 允许 SOCK_DGRAM 类型?

转载 作者:太空宇宙 更新时间:2023-11-04 10:19:58 24 4
gpt4 key购买 nike

我最近一直在学习 Linux 套接字编程,主要来自 this site .

网站说使用域/类型组合 PF_LOCAL/SOCK_DGRAM...

Provides datagram services within the local host. Note that this service is connectionless, but reliable, with the possible exception that packets might be lost if kernel buffers should become exhausted.

那么,我的问题是,根据它的手册页,为什么 socketpair(int domain, int type, int protocol, int sv[2]) 允许这种组合...

The socketpair() call creates an unnamed pair of connected sockets in the specified domain, of the specified type...

这不是自相矛盾吗?

我认为 PF_LOCALPF_INET 域中的 SOCK_DGRAM 隐含 UDP,这是一种无连接协议(protocol),所以我无法调和与 socketpair() 创建连接套接字的声明冲突。

最佳答案

数据报套接字具有“伪连接”。该协议(protocol)实际上没有连接,但您仍然可以调用 connect()。这将一个远程地址和端口与套接字相关联,然后它只接收来自该源的数据包,而不是所有目的地是套接字绑定(bind)到的地址/端口的数据包,你可以使用 send( ) 而不是 sendto() 发送回这个远程地址。

TFTP 协议(protocol)可能会用到它。服务器最初在众所周知的端口上监听传入请求。传输开始后,将使用不同的端口,发送方和接收方可以使用 connect() 将套接字与该对端口相关联。然后他们可以简单地在那个新套接字上发送和接收以参与传输。

同样,如果您对数据报套接字使用 socketpair(),它会在两个套接字之间创建一个伪连接。

关于linux - 为什么 socketpair() 允许 SOCK_DGRAM 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44316571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com