Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sockaddr_存储从IP版本独立创建和连接套接字_C_Sockets_Unix_Network Programming - Fatal编程技术网

使用sockaddr_存储从IP版本独立创建和连接套接字

使用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

我正在编写一个客户端,它可以连接到IPv4和IPv6地址,使代码尽可能通用。 我使用了
getaddrinfo
函数,将IP地址字符串传递给该函数,并从中获得地址族(此时我知道是IPv4还是IPv6)。现在我需要将该地址和端口绑定到sockaddr结构。我已经读到,为了使它更通用,我应该使用sockaddr\u存储,然后通过将其强制转换为sockaddr来使用它,但我不知道如何用连接所需的地址和端口填充sockaddr\u存储

谢谢你的关注

注意。我希望它能在UNIX上工作。

唯一的说明是
sockaddr\u存储
应该是

  • 足够大,可以容纳所有受支持的特定于协议的地址结构

  • 在适当的边界对齐,以便指向它的指针可以转换为指向特定于协议的地址结构的指针,并用于访问这些结构的字段,而不会出现对齐问题

sockaddr_存储结构应至少包含以下构件:

sa_family\u t ss_family

有一些注释指出,所有
sockaddr
-族结构的
结构成员将位于同一位置,但仅此而已

因此,我想说,使用它的“最佳”方式是为IPv4和IPv6设置特殊情况,在或sockaddr\u in6结构中填入正确的
sockaddr\u,然后将它们放入以后可以使用的
sockaddr\u存储
结构中