C++套接字 - 从结构数组返回单个地址信息
C++ Sockets - Returning single addrinfo from array of strcutures
我已经很久没有
和C++一起工作了,所以这可能是一个基本问题,但我似乎找不到解决方案。
我需要编写一个小的C++套接字类,可以查找给定主机/端口的IP地址。在类中一切正常,尽管我不确定如何将单个 addrinfo 结构(我在下面标记了一行(从结构数组返回到调用函数。 我尝试过内存复制、指针等。似乎什么都不起作用。
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
int getAddressInfo(char* host, char* port, struct addrinfo singleAddress);
不能从按值传递给该函数的参数中的函数返回值。 singleAddress
是 getAddressInfo
的局部变量。您可以根据需要修改它,调用方将看不到任何内容。
您需要熟悉通过引用/指针传递参数。
相关文章:
- 在C++中为零大小的分配返回唯一地址背后的基本原理是什么?
- 从函数返回变量地址时如何修复"与局部变量关联的堆栈内存地址"?
- 为什么在递增后使用 [] 运算符访问指针数组会返回错误地址的当前内存位置
- 将对象强制转换为 dlsym 返回的地址
- DropDownList 组合上的 SendDlgItemMessage CB_GETLBTEXT 返回单个字母
- 替换WCHAR_T错误返回存储地址
- WM_GETTEXT只返回单个字符
- 数组中的值之和返回内存地址,除非sizeof(array)/2
- 初学者C++:返回单个值。问题:我的金额四舍五入,我不希望它四舍五入
- 如何从采用 int 和 struct 类型的指针的函数中取消引用指针返回的地址?
- C++ 从链表中返回单个值
- 函数从堆栈返回的地址是什么
- 使用指针数组中的对象调用重载的友元 ostream 插入运算符将返回内存地址
- C++返回内存地址而不是值
- 运算符 (&) 返回的地址是否为虚拟?
- 存储多个类型并根据请求返回单个类型
- CMSIS-RTOS 的 osMailFree() 返回一些地址而不是 osStatus-type 值
- 显示 new() 在 malloc 返回的地址调用对象的构造函数的源代码
- 地址操作符在嵌入式环境中返回无效地址
- C++套接字 - 从结构数组返回单个地址信息