gpt4 book ai didi

sockets - IPPROTO_IP 与 IPPROTO_TCP/IPPROTO_UDP

转载 作者:行者123 更新时间:2023-12-03 11:28:42 24 4
gpt4 key购买 nike

我在查找有关 socket 的第三个参数的这些设置之间的区别的文档时遇到了一些麻烦。是。我知道 TCP 和 UDP 及其差异,而且 IP 是堆栈上的一层(下?)...无论我将其设置为 IPPROTO_IP,我的 UDP 代码似乎都一样工作。或 IPPROTO_UDP .

最佳答案

socket() 的文档在 Linux 上分为不同的联机帮助页,包括 ip(7)指定您必须使用 0IPPROTO_UDP对于 UDP 和 0IPPROTO_TCP用于 TCP。当您使用 0 ,恰好是 IPPROTO_IP 的值, UDP 用于 SOCK_DGRAM TCP 用于 SOCK_STREAM .

在我看来,创建 UDP 或 TCP IPv4 套接字对象的干净方法如下:

int sock_udp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
int sock_tcp = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

原因是通常显式比隐式更好。在这种特定情况下,使用 0或更糟 IPPROTO_IP因为第三个论点对你没有任何好处。

还可以想象使用可以同时处理流和数据报的协议(protocol),如 sctp。通过始终指定 socktype 和协议(protocol),您可以避免任何歧义。

关于sockets - IPPROTO_IP 与 IPPROTO_TCP/IPPROTO_UDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5385312/

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