我观察到,这是因为港口的原因。端口为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));
}发布于 2012-04-24 13:33:59
这可能看起来非常愚蠢,但这就是我修复它的方式。
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()时,无论出于什么原因,它都没有删除结尾处的换行符。上面的修复(如果你称之为修复)不再需要了。
https://stackoverflow.com/questions/10291923
复制相似问题