Ошибка WSAEAFNOSUPPORT

Привет, я внедряю приложение для чата 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; }

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

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

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

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

// отправка данных пиру

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

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


person Chris_vr    schedule 29.09.2010    source источник
comment
Вы решили это? Удалось ли вам проверить, что эти две семьи одинаковы?   -  person Default    schedule 01.10.2010


Ответы (1)


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

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

person Default    schedule 29.09.2010