使用sockaddr_存储从IP版本独立创建和连接套接字
我正在编写一个客户端,它可以连接到IPv4和IPv6地址,使代码尽可能通用。 我使用了使用sockaddr_存储从IP版本独立创建和连接套接字,c,sockets,unix,network-programming,C,Sockets,Unix,Network Programming,我正在编写一个客户端,它可以连接到IPv4和IPv6地址,使代码尽可能通用。 我使用了getaddrinfo函数,将IP地址字符串传递给该函数,并从中获得地址族(此时我知道是IPv4还是IPv6)。现在我需要将该地址和端口绑定到sockaddr结构。我已经读到,为了使它更通用,我应该使用sockaddr\u存储,然后通过将其强制转换为sockaddr来使用它,但我不知道如何用连接所需的地址和端口填充sockaddr\u存储 谢谢你的关注 注意。我希望它能在UNIX上工作。唯一的说明是sockad
getaddrinfo
函数,将IP地址字符串传递给该函数,并从中获得地址族(此时我知道是IPv4还是IPv6)。现在我需要将该地址和端口绑定到sockaddr结构。我已经读到,为了使它更通用,我应该使用sockaddr\u存储,然后通过将其强制转换为sockaddr来使用它,但我不知道如何用连接所需的地址和端口填充sockaddr\u存储
谢谢你的关注
注意。我希望它能在UNIX上工作。唯一的说明是sockaddr\u存储
应该是
- 足够大,可以容纳所有受支持的特定于协议的地址结构
- 在适当的边界对齐,以便指向它的指针可以转换为指向特定于协议的地址结构的指针,并用于访问这些结构的字段,而不会出现对齐问题
sa_family\u t ss_family
有一些注释指出,所有sockaddr
-族结构的族
结构成员将位于同一位置,但仅此而已
因此,我想说,使用它的“最佳”方式是为IPv4和IPv6设置特殊情况,在或sockaddr\u in6结构中填入正确的sockaddr\u,然后将它们放入以后可以使用的sockaddr\u存储
结构中