getaddrinfo 失败,出现错误:C++ 中不支持ai_socktype服务名称

getaddrinfo failing with error : Servname not supported for ai_socktype in C++

本文关键字:ai 不支持 socktype 服务 C++ 失败 错误 getaddrinfo      更新时间:2023-10-16

观察到,因为端口。 端口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: %sn", gai_strerror(rv));
}

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

    int pp = atoi(port.c_str());
    char buffer[50];
    sprintf( buffer, "%d", pp );   
    if ((rv = getaddrinfo(NULL, buffer, &hints, &servinfo)) != 0) {
        fprintf(stderr, "getaddrinfo: %sn", gai_strerror(rv));
    }

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