首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getaddrinfo失败,错误为: C++中的ai_socktype不支持Servname

getaddrinfo失败,错误为: C++中的ai_socktype不支持Servname
EN

Stack Overflow用户
提问于 2012-04-24 12:55:32
回答 1查看 20.2K关注 0票数 4

我观察到,这是因为港口的原因。端口为C++字符串。当我硬编码端口号为"4091“时,我看不到这个问题。有什么建议吗?

代码语言:javascript
复制
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));
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-24 13:33:59

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

代码语言:javascript
复制
    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()时,无论出于什么原因,它都没有删除结尾处的换行符。上面的修复(如果你称之为修复)不再需要了。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10291923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档