socket编程addrinfo结构

socket编程addrinfo结构,c,sockets,C,Sockets,在socket编程中(我使用Winsock,如果这很重要的话),socket类型的结构成员值(即流)是否必须与协议结构成员的值(即TCP)匹配?在Winsock的文档中,它说这些只是可能的值,这意味着“它们不一定要匹配(即流到TCP,或数据报到UDP)” 如果它们不一定要匹配,在什么情况下您能够匹配它们?如果它们特别需要匹配,那么当一个值决定另一个值时,为什么要指定两个结构成员呢?我想您是指getaddrinfo()的pHints参数。严格来说,它们不必匹配,但如果组合不合理,则不会得到任何结果

在socket编程中(我使用Winsock,如果这很重要的话),socket类型的结构成员值(即流)是否必须与协议结构成员的值(即TCP)匹配?在Winsock的文档中,它说这些只是可能的值,这意味着“它们不一定要匹配(即流到TCP,或数据报到UDP)”


如果它们不一定要匹配,在什么情况下您能够匹配它们?如果它们特别需要匹配,那么当一个值决定另一个值时,为什么要指定两个结构成员呢?

我想您是指
getaddrinfo()
pHints
参数。严格来说,它们不必匹配,但如果组合不合理,则不会得到任何结果


但是您可以将其中一个设置为
0
,并且只使用另一个。

我在t.com/en us/library/windows/desktop/ms740104(v=vs.85)aspx上看到了协议信息结构,但无法分辨您所指的套接字结构。你有链接吗?@RaymondHettinger查看
addrinfo
结构。我指的是
struct addrinfo
除了TCP之外,还有许多流协议,除了UDP之外,还有许多基于数据报的协议。如果你想安全起见,你应该在
getaddrinfo
的提示中指定
IPPROTO\u TCP
IPPROTO\u UDP
。当你想要实现你自己的协议时,这是一种净空,因为每个套接字类型只有一个指定的协议。因为即使是为了将来额外的库协议支持,我仍然认为只指定协议是您所需要的(socktype有点隐含)。