работает, когда iam пытается связать мой локальный адрес автоматической настройки. но когда я пытаюсь связать какой-то вручную назначенный адрес IPv6, bind() с ошибкой 10049. вот кодBind() api не работает с адресом ipv6
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 дней!
Что вы измените 'fe80 :: 216: 76ff: FE12: 2661% 4', когда вы попробуйте вручную назначенный адрес ? Код, связанный с идентификатором области, должен быть другим. (должно быть, вероятно, уйти, на самом деле.) – mpontillo
Майк фактически Iam установил некоторые адреса, такие как «2000 :: 3». В этом случае привязка не удалась! но когда я устанавливаю адрес в локальном добавочном формате link, начиная с fe80, он работает. Но один из моих коллег присвоил некоторые адреса, кроме как в формате link-local add. для двух систем, подключенных к спине, и он мог отправлять и получать трафик с помощью сокетов. и это беспокоит меня !!! может быть какая-то проблема с моей конфигурацией IPv6 !!! – user1151217
Ваш 'sscanf()' не будет пытаться проанализировать идентификатор области с этим входом. – mpontillo