Ошибка WSAEAFNOSUPPORT - PullRequest
       5

Ошибка WSAEAFNOSUPPORT

0 голосов
/ 29 сентября 2010

Привет Я реализую приложение чата P2P, где сервер будет посредником для обмена IP-адресом и портом для подключения к пиру. Я получаю сообщение об ошибке WSAEAFNOSUPPORT 10047.

Я создал UDP розетка

sockfd = сокет (AF_INET, SOCK_DGRAM, IPPROTO_UDP); тогда я связываю его с локальным ip и портом.

if (bind (sockfd, (struct sockaddr *) & localaddr, sizeof (localaddr)) <0) { Error_Code ( "create_socket: Bind ()"); возврат -1; } </p>

тогда я связываюсь с сервером.

// соединение с сервером

sendto (sockfd, pBuffer, sizeof (nMessageType), 0, (const sockaddr *) & config.serverAddr, size);

сервер отслеживает другой подключенный узел peer.once подключается к серверу и возвращает IP-адрес и порт другого узла. Таким образом, узел может использовать IP-адрес и порт для прямого подключения к другому узлу. но я получаю ошибку при отправке данных на другой узел

// отправка данных равноправному узлу

int ret = sendto (sockfd, sendBuf, sizeof (nMessagetype), 0, (const sockaddr *) & m_peer.publicaddr, sockAddLen); возвращается ошибка 10047 WSAEAFNOSUPPORT.

Здесь я использую один и тот же сокет для связи с сервером и другим узлом, это причина этого? Я не понимаю, что здесь происходит не так. Он может правильно подключиться к серверу, но не может подключиться к другому узлу.

1 Ответ

1 голос
/ 29 сентября 2010

Указано в sendto и для фактического сообщения об ошибке WSAEAFNOSUPPORT адрес, который вы используете для отправки, не принадлежит к тому семейству, что и сокет, на который вы отправляете.1005 *

Необходимо убедиться, что адрес в m_peer.publicaddr принадлежит к тому же семейству, что и sockfd.Например, если вы отправите адрес для IPv6, AF_INET не будет работать (это должно быть AF_INET6)

...