2012-04-24 145 views
3

这是我观察到的,因为这个端口。端口是C++字符串。当我硬编码的端口号码说“4091”我没有看到这个问题。有什么建议么?getaddrinfo失败,错误:C++中不支持ai_socktype的服务名称

int sockfd; 
struct addrinfo hints, *servinfo, *p; 
int rv; 

memset(&hints, 0, sizeof hints); 
hints.ai_family = AF_UNSPEC; 
hints.ai_socktype = SOCK_DGRAM; 
hints.ai_flags = AI_PASSIVE; 

cout << "port: " << port << endl; 

const char * por = port.c_str(); 

if ((rv = getaddrinfo(NULL, por, &hints, &servinfo)) != 0) { 
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); 
} 
+0

'提示'中有什么? – 2012-04-24 04:58:24

+0

我更新了问题。它只是addrinfo结构。 – FourOfAKind 2012-04-24 05:02:00

+0

@Lamia这是实际的代码?你应该初始化提示' – nos 2012-04-24 05:05:18

回答

5

这可能看起来绝对愚蠢的,但我这是怎么固定它。

int pp = atoi(port.c_str()); 
    char buffer[50]; 
    sprintf(buffer, "%d", pp); 

    if ((rv = getaddrinfo(NULL, buffer, &hints, &servinfo)) != 0) { 
     fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); 
    } 

编辑:实际的问题是,我正在从文件读取端口信息。当我使用getline()时,由于某种原因它并没有删除换行符。上述修复(如果您称之为修复)不再需要。

+0

让我成为第一个说这没有意义的人。你有没有直接用'port.c_str()'调用'getaddrinfo'?也许你应该比较不同的字符串,看看它们是否有所不同,这可能是编译器中的一个错误的标志(尽管不太可能,它已被发现)。 – 2012-04-24 05:39:23

+0

是的,我同意。我试了3次,来回换了一次。它不适用于port.c_str()。 – FourOfAKind 2012-04-24 05:48:20

+3

@JoachimPileborg:实际的问题是我正在从文件中读取端口信息。当我使用getline()时,由于某种原因它并没有删除换行符。当我修复它时,它直接调用get.class()函数getaddrinfo时工作正常。谢谢。 – FourOfAKind 2012-04-24 17:41:11

相关问题