Domanda
Ciao Io sono l'attuazione P2P chat applicazione in cui Server mediatore per exchangeing IP e la porta per la connessione peer. Sto ottenendo WSAEAFNOSUPPORT errore 10047.
ho creato UDP Presa
sockfd = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP); poi iam legandola a IP locale e la porta.
if (bind (sockfd, (struct sockaddr *) & localaddr, sizeof (localaddr)) <0) { Error_Code ( "create_socket: bind ()"); ritorno -1; }
allora io sto contattando il server.
// la connessione con il server
sendto (sockfd, pBuffer, sizeof (nMessageType), 0, (const sockaddr *) & config.serverAddr, dimensioni);
Server registra l'altro si collega collegato peer.once pari al server che tornare IP e la porta di altri peer.so un peer può usare IP e la porta per collegare direttamente ad altri peer. ma sto ottenendo errore durante l'invio dei dati al di altri peer
// invio dei dati al pari
int ret = sendto (sockfd, sendbuf, sizeof (nMessagetype), 0, (const sockaddr *) e m_peer.publicaddr, sockAddLen); esso restituire 10047 errore WSAEAFNOSUPPORT.
Qui sto usando lo stesso socket server di contatto e altri peer è questo motivo? Non capisco cosa non va qui. E 'in grado di connettersi con il server corretto, ma non riesce a collegare altri peer.
Soluzione
fuori a punta nel sendto per il messaggio di errore effettivo WSAEAFNOSUPPORT l'indirizzo che si sta utilizzando per inviare non è della stessa famiglia, come la presa si sta inviando via.
È necessario fare in modo che l'indirizzo in m_peer.publicaddr
è della stessa famiglia come sockfd
.
Per esempio, se si invia un indirizzo IPv6, AF_INET
non sarà il lavoro (che avrebbe dovuto essere AF_INET6
)