2012-04-24 83 views
3

這是我觀察到的,因爲這個端口。端口是C++字符串。當我硬編碼的端口號碼說「4091」我沒有看到這個問題。有什麼建議麼?getaddrinfo失敗,錯誤:C++中不支持ai_socktype的服務名稱

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

'提示'中有什麼? – 2012-04-24 04:58:24

+0

我更新了問題。它只是addrinfo結構。 – FourOfAKind 2012-04-24 05:02:00

+0

@Lamia這是實際的代碼?你應該初始化提示' – nos 2012-04-24 05:05:18

回答

5

這可能看起來絕對愚蠢的,但我這是怎麼固定它。

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()時,由於某種原因它並沒有刪除換行符。上述修復(如果您稱之爲修復)不再需要。

+0

讓我成爲第一個說這沒有意義的人。你有沒有直接用'port.c_str()'調用'getaddrinfo'?也許你應該比較不同的字符串,看看它們是否有所不同,這可能是編譯器中的一個錯誤的標誌(儘管不太可能,它已被發現)。 – 2012-04-24 05:39:23

+0

是的,我同意。我試了3次,來回換了一次。它不適用於port.c_str()。 – FourOfAKind 2012-04-24 05:48:20

+3

@JoachimPileborg:實際的問題是我正在從文件中讀取端口信息。當我使用getline()時,由於某種原因它並沒有刪除換行符。當我修復它時,它直接調用get.class()函數getaddrinfo時工作正常。謝謝。 – FourOfAKind 2012-04-24 17:41:11

相關問題