4

これは、ポートのおかげで観察しました。ポートは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));
}
4

1 に答える 1

7

これは絶対にばかげているように見えるかもしれませんが、これは私がそれを修正した方法です。

    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()を使用すると、何らかの理由で最後に改行文字が削除されませんでした。上記の修正(修正と呼んでいる場合)は不要になりました。

于 2012-04-24T05:33:59.080 に答える