在包括Beej's Guide在内的所有示例中,IP 地址以点表示法提供,然后馈送到::getaddrinfo()
. 这篇文章没有回答我的问题。
之后,该addrinfo
结构用于与套接字相关的功能(例如connect()
,、、bind()
)listen()
。例如:
struct addrinfo hints, *res;
// ... create socket etc.
connect(sockfd, res->ai_addr, res->ai_addrlen);
示例
变量ai_addr
的类型sockaddr
可以安全地转换为sockaddr_storage
,sockaddr_in
和sockaddr_in6
。
问题:
如果我将类型转换sockaddr
为sockaddr_in
(或sockaddr_in6
)
sockaddr_in& ipv4 = (sockaddr_in&)(sockaddr_variable);
并提供以下信息:
- ipv4.sin_family = AF_INET
- ipv4.sin_addr = [网络字节顺序的IP地址]
- ipv4.sin_port = [网络字节顺序的端口号]
我connect()
可以使用上述信息直接调用该方法吗?
connect(sockfd, &ipv4, sizeof(ipv4));
使用我的程序,它似乎不起作用。我错过了什么,还是有更好的方法?
背后的动机是,如果我们有套接字可读格式的 IPAddress、Port 等信息,那么为什么要经过循环getaddrinfo()