如何修改ip的PADDRINFOA结构

问题描述:

我迷上了getaddrinfo函数,我想修改ip的ppResult如何修改ip的PADDRINFOA结构

f_getaddrinfo(PCSTR pNodeName, PCSTR pServiceName, const ADDRINFOA *pHints, PADDRINFOA *ppResult) { 

    // REAL FUNCTION 
    r_getaddrinfo(pNodeName,pServiceName,pHints,ppResult); 

    // FAIL 
    sockaddr_in addrIn; 
    inet_pton(AF_INET, "127.0.0.1", &addrIn.sin_addr); 
    const_cast<PADDRINFOA>(*ppResult)->ai_addr = (struct sockaddr*)&addrIn.sin_addr; 

    // FAIL 
    inet_pton(AF_INET, "127.0.0.1", const_cast<PADDRINFOA>(*ppResult)->ai_addr); 
} 

非常感谢

+0

欢迎堆栈溢出。请花些时间阅读[The Tour](http://*.com/tour),并参阅[帮助中心](http://*.com/help/asking)中的资料,了解您可以在这里问。 –

+0

你的代码出了什么问题? –

+0

@freakish我试过 - >错误“表达式必须有类指针类型” – NewCoder30

首先,不使用PADDRINFOA*PADDRINFOA已经是指向ADDRINFOA的指针,现在你实际上有双指针了。其实坚持struct addrinfo*这是便携式。

反正试试这个:

PADDRINFOA result = *ppResult; // Should not do that, ppResult should be PADDRINFOA 
struct sockaddr_in* addr = reinterpret_cast<struct sockaddr_in*>(result->ai_addr); 
inet_pton(AF_INET, "127.0.0.1", &(addr->sin_addr)); 
+0

编译错误“表达式必须有类指针类型” – NewCoder30

+0

@ NewCoder30 OMG,为什么你的'ppResult'对象是'PADDRINFOA *' ??? 'PADDRINFOA'已经是'ADDRINFOA'的指针。无论如何,我已经更新了答案。 – freakish

+0

非常感谢,工作!!!,对不起,我正在学习C/++编程,我不知道一些事情。我会学习更多。 – NewCoder30