如何解决解释“s = socket(res->ai_family, res->ai_socktype, res->ai_protocol)”
int s;
struct addrinfo hints,*res;
getaddrinfo("www.example.com","http",&hints,&res);
s = socket(res->ai_family,res->ai_socktype,res->ai_protocol);
请解释最后一行代码
解决方法
socket 的概念是一种非常通用的通信方式。 它可以处理本地进程之间的通信,您的进程与系统内核的某些内部方面(事件...)之间的通信,通过网络进行的通信... 即使在处理网络时,也存在许多协议族和许多协议。
这就是为什么当我们创建一个套接字时(在最后一行调用 socket()
),我们必须提供几个参数以便选择所需套接字的正确属性。
man 2 socket 主要解释第一个参数(domain 或 protocol family),但其他参数将在后续页面中解释,因为它们取决于对第一个参数所做的选择.
请注意,一旦通过 socket()
调用获得套接字,您可能需要通过其他系统调用提供许多其他设置,具体取决于您的意图(bind()
用于服务器,{{1} } 对于客户端......存在许多设置)。
在您的示例中,您似乎想要访问名为 connect()
的 HTTP 服务器。
您可以硬编码这样一个事实,即可以使用 www.example.com
协议系列(对于 ipv4,或 AF_INET
对于 ipv6)通过 TCP 连接(类型 { {1}}、协议 AF_INET6
) 但 getaddrinfo()
function 可以帮助提供所有这些细节和一些其他细节以在后续系统调用中使用(IP 地址和端口号将在后续 {{1 }} 调用例如)。
所有这些信息都存在于返回的 SOCK_STREAM
的成员中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。