c++ - getaddrinfo 失败,错误为 : Servname not supported for ai_socktype in C++

标签 c++ sockets

我观察到,这是因为端口。端口是 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));
}

最佳答案

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

    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() 时,无论出于何种原因,它都没有在末尾删除换行符。不再需要上述修复(如果您称之为修复)。

关于c++ - getaddrinfo 失败,错误为 : Servname not supported for ai_socktype in C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10291923/

相关文章:

python - 使用数据转换器将 3D 体积显示为图像

javascript - Node.js + Socket.io 如何从 PHP 接收数据

c++ - winsock2 无法绑定(bind)套接字

c++ - CPP 为子类设置默认值

c - 打开名称为 socket :[4023] 的套接字

php - MacPorts 升级 MAMP 并出现 PHPMyAdmin 错误 #2002

c - 如何从套接字获取客户端的IP地址

c++ - Qt ASCII转IP函数

c++ - 流网络摄像头速度慢 "detectMultiScale"

c++ - 将一个点变成另一个点的算法