API Bind () не работает с IPv6-адресом - PullRequest
0 голосов
/ 16 января 2012

работает, когда я пытаюсь привязать мой локальный адрес ссылки автоконфигурации. но когда я пытаюсь привязать к некоторому назначенному вручную IPv6-адресу, bind () завершается с ошибкой 10049. вот код

bool StartServer()
{
  const char *Ip = " fe80::216:76ff:fe12:2661%4";
  SHORT nIPFamily = -1;
  int dSock;
  union 
 {
   struct sockaddr_in  saddr4;
   struct sockaddr_in6  saddr6;
 }ServerIP;

MemSet (& ServerIP, 0, SizeOf (ServerIP));

 if(strstr(Ip,":"))
 {
   UCHAR MyIp[16];
   USHORT ScopeId = 0;
   ServerIP.saddr6.sin6_family = nIPFamily = AF_INET6;
   ServerIP.saddr6.sin6_port = htons( nPort );
   StringToAddress( Ip, MyIp ); //common function to convert string to address (16byte)
   memcpy( ServerIP.saddr6.sin6_addr.u.Byte, MyIp,16 );
   sscanf(strstr(Ip,"%")+1,"%d",&ScopeId);
   ServerIP.saddr6.sin6_scope_id = ScopeId;
   nAddLen = sizeof(sockaddr_in6);
   psockaddr = &ServerIP.saddr6;
 }

 if ((dSock = socket(nIPFamily, SOCK_STREAM, 0)) < 0)
 {
   AfxMessageBox("Failed to create server socket");
   return -1;
 }
 if (bind (dSock, (sockaddr*)psockaddr, nAddLen) < 0)
 {
   char errmsg[128];
   sprintf(errmsg,"Bind Failed with error %d",WSAGetlastError());
   AfxMessageBox(errmsg);
   return -1;
 }

Пожалуйста, совет. Я застрял с этим более 2 дней !!!

Ответы [ 2 ]

0 голосов
/ 16 января 2012

только локальные адреса ссылок используют идентификатор области, не добавляйте его при использовании глобальной одноадресной передачи

0 голосов
/ 16 января 2012

Предложения:

Q: in6addr_any работает?

Q: Вы работаете на ПК с поддержкой ipv6 (под управлением Vista или Win7, дляпример)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...