- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在浏览 msdn 的“Getting Started With Winsock”,他们用参数打开了一个套接字
struct addrinfo *result = NULL,
*ptr = NULL,
hints;
iResult = getaddrinfo(
argv[1],
DEFAULT_PORT,
&hints,
&result
);
ptr=result;
ConnectSocket = socket(
ptr->ai_family, // Address Family (address families like ipv6 ipv4)
ptr->ai_socktype, // Type (Like tcp, udp ect)
ptr->ai_protocol // Protocol to use (0 = service provider chooses)
);
但是 binarytides“Winsock tutorial”是这样做的(他们使用的是 C,但我看到有人用 C++ 这样做)
s = socket(
AF_INET ,
SOCK_STREAM ,
0
)
ptr-> 是做什么的?为什么要使用它而不是像 AF_INET 一样设置它?
此外,如果您有空闲时间并且熟悉套接字,我将不胜感激。
最佳答案
socket(ptr->ai_family,ptr->ai_socktype, ptr->ai_protocol);
传入变量来创建套接字,而不是对值进行硬编码。您获得的优势是代码适用于 IPv4 和 IPv6。
ptr->ai_family
只是一个整数,是 struct addrinfo 的一个成员. (如果您想知道 ptr->
的特定语法,您可以查看 this question ),它的值将是 AF_INET
或 AF_INET6
(或者理论上任何其他支持的协议(protocol))
调用 getaddrinfo()
将查找主机名,并将其解析为 IPv4 或 IPv6,然后将结果传递给 socket() 以创建适当的套接字类型。如果主机名解析为 IPv4 主机,则创建一个可以处理 IPv4 的套接字,如果它解析为 IPv6,则创建一个 IPv6 套接字。
如果您改为对值进行硬编码,例如作为 AF_INET
,您将只支持 IPv4,而 ptr->ai_family
可以是 AF_INET
或 AF_INET6
。
关于c++ - ptr->ai_family 与 AF_INET 相比有何作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39462861/
以下是我为接受来自客户端的连接而编写的代码片段。我想打印远程主机名。 getnameinfo() 失败并出现错误:不支持 ai_family。我在互联网上尝试了不同的选项,比如指定 AF_UNSPEC
我正在努力了解套接字编程,但遇到了一些(对我而言)意想不到的行为。 当我尝试将数据发送到“localhost”并将 addrinfo.ai_family 设置为 AF_INET 时,我发送的消息没有从
我正在浏览 msdn 的“Getting Started With Winsock”,他们用参数打开了一个套接字 struct addrinfo *result = NULL,
我使用一个库来做一些网络工作,当客户端连接时,这个库提供了一个“struct sockaddr *”来保存客户端套接字。我只是想提取 IP 和端口,目前我是这样做的: #include #inclu
#include #include #include /// Global declarations: const char *hostNameOrIPAddress; const char
我是一名优秀的程序员,十分优秀!