gpt4 book ai didi

C++ 套接字 - 从结构数组返回单个地址信息

转载 作者:太空宇宙 更新时间:2023-11-04 11:10:45 25 4
gpt4 key购买 nike

自从我使用 C++ 以来已经有很长时间了,所以这可能是一个基本问题,但我似乎找不到解决方案。

我需要编写一个小型 C++ 套接字类,它可以查找给定主机/端口的 IP 地址。尽管我不确定如何从结构数组向调用函数返回单个 addrinfo 结构(我在下面标记了该行),但在类内部一切正常。我已经尝试过 memcopy、指针等。似乎没有任何效果。

Getaddrinfo 返回地址结构数组 (m_addList)。编译/运行时,类内部的结果与返回的结果完全不同。请注意,为了简单起见,我简化了示例。

./lookup www.stackoverflow.com 80
=> 2
=> 1
-> 32767
-> 4197087

标有“=>”的值是正确的,可以用来生成套接字,尽管“->”的值不正确会导致套接字错误。

代码:

#include <netdb.h>
#include <arpa/inet.h>
#include <string.h>
#include <iostream>
using namespace std;

class getAddress
{
private:
struct addrinfo *m_addList; // List of returned address info structures
public:
int getAddressInfo(char* host, char* port, struct addrinfo singleAddress);
};

int getAddress::getAddressInfo(char* host, char* port, struct addrinfo singleAddress)
{
int ret;
struct addrinfo addCriteria;

memset(&addCriteria, 0, sizeof(addCriteria));
addCriteria.ai_family = AF_UNSPEC;
addCriteria.ai_socktype = SOCK_STREAM;
addCriteria.ai_protocol = IPPROTO_TCP;

ret = getaddrinfo(host, port, &addCriteria, &m_addList);
if (ret != 0)
return -1;

// Simply return the first address found
singleAddress = *m_addList; // <---- This is my problem
cout << "=> " << singleAddress.ai_family << endl;
cout << "=> " << singleAddress.ai_socktype << endl;

return 0;
}

int main(int argc, char* argv[])
{
int res;
struct addrinfo inVal;

if (argc < 3)
cout << "Usage: main [domain] [port]" << endl;

getAddress adObj;
res = adObj.getAddressInfo(argv[1], argv[2], inVal);
if (res == 0)
{
cout << "-> " << inVal.ai_family << endl;
cout << "-> " << inVal.ai_socktype << endl;
}
}

非常感谢您的帮助!

最佳答案

将你的函数改成这样:

int getAddress::getAddressInfo(char* host, char* port, struct addrinfo &singleAddress)

就像现在一样,您只修改了 singleAddress 的本地拷贝,而没有对 inVal 做任何事情

关于C++ 套接字 - 从结构数组返回单个地址信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23350542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com