我需要创建一个带有调用getaddrinfo()函数的C++套接字类(它使用'struct **res‘作为第四个参数)。
为了使它正常工作,我引用了一个指针来传递'singleAddress‘变量。我读到这是一种糟糕的实践,但我不知道如何使这段代码正常工作。
下面的代码工作得很好。我想我的问题是,使用*&是否是良好的实践,还是有更好的方法重写此调用,并且仍然具有返回可用addrinfo结构的函数?
#include <netdb.h>
#include <arpa/inet.h>
#include <string.h>
#include <iostream>
using namespace std;
class getAddress
{
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, &singleAddress);
if (ret != 0)
return -1;
cout << "> " << singleAddress->ai_family << endl;
cout << "> " << singleAddress->ai_socktype << endl; //<-- These must match
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; //<-- These must match
}
return 0;
}非常感谢!
发布于 2015-03-04 10:00:57
如果您正在使用需要指针的API,则可以通过引用传递指针。我没有看到的是getAddress类的意义。-朱坎桑
https://stackoverflow.com/questions/23566376
复制相似问题