0

ポートを返すことはできますが、IPは返されません。Getsockname以外のものを使用する必要がありますか?どうも

        if ((sock = ::socket(AF_INET, SOCK_STREAM, 0)) == -1) {
            c.Format("Socket Error:  %d", GetLastError());
            tcpMESSAGE = 1;
            break;
        }


        server_addr.sin_family = AF_INET;         
        server_addr.sin_port = htons(4000); //port setting    
        server_addr.sin_addr.s_addr = INADDR_ANY; 

        if (::bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) {
            c.Format("Bind Error:  %d", GetLastError());
            tcpMESSAGE = 1;
            break;
        }

        if(1==1){
            int len = sizeof server_addr;
            if(::getsockname(sock,(struct sockaddr*)&server_addr,&len) == -1)
                MessageBox("Error local host ip");

            c.Format("local addr %s:%u\n  errno: %d",inet_ntoa(server_addr.sin_addr),ntohs(server_addr.sin_port), errno);
            MessageBox(c);
        }
4

1 に答える 1

5

にバインドしてINADDR_ANYいますが、ソケットをピアにまだ接続していないためgetsockname()、戻るためのIPがありません。connect()またはaccept()を介して接続が確立された後、getsockname()その接続に使用されている特定のIPを返すことができます。自分が行っていない特定のIPにバインドしない限り、バインドだけでは十分ではありません。

于 2012-06-07T01:18:18.163 に答える