getaddrinfo失败并出现错误:C ++中ai_socktype不支持Servname

时间:2012-04-24 04:55:32

标签: c++ sockets

我观察到这是因为这个港口。 port是C ++字符串。当我硬编码端口号说“4091”我没有看到这个问题。有什么建议吗?

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));
}

1 个答案:

答案 0 :(得分:4)

这可能看起来绝对愚蠢,但这就是我修复它的方式。

    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()时,它没有在最后删除换行符,原因是什么。

,不再需要上面的修复(如果你称之为修复)