首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICMPv6套接字未能创建

ICMPv6套接字未能创建
EN

Stack Overflow用户
提问于 2016-03-03 10:51:52
回答 2查看 365关注 0票数 0

我试图向远程网络发送ICMPV6消息,作为第一步,我尝试在一个简单类(SendICMPv6.c)中创建一个ICMPv6套接字,其中包含winsock2ws2tcpipstdiostdlib头。但我无法创建套接字。有人能帮上忙吗?

守则是:

代码语言:javascript
复制
WSADATA  wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0) {
        wprintf(L"WSAStartup failed: %d\n", iResult);
        return 1;
    }
int fd = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
    if (fd < 0) {
        perror("creating socket failed");
    }

有人能解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-03 12:05:46

如果仔细阅读文档,您可以检查以下几个选项:

  1. 您的操作系统可以创建SOCK_RAW套接字吗? 如果Winsock服务提供程序支持AF_INET或AF_INET6地址家族的AF_INET6套接字,则应将SOCK_RAW的套接字类型包含在WSAEnumProtocols函数为一个或多个可用传输提供程序返回的信息结构中。
  2. 你是以行政长官的身份参选吗? 因此,只有管理员组的成员才能在Windows 2000及更高版本上创建类型为SOCK_RAW的套接字。

您需要在代码中添加更多的错误检查。例如,如果socket()失败:

如果没有发生错误,套接字将返回引用新套接字的描述符。否则,将返回INVALID_SOCKET的值,并且可以通过调用WSAGetLastError检索特定的错误代码。

票数 2
EN

Stack Overflow用户

发布于 2016-03-03 23:42:45

SOCK_RAW需要管理权限。您的应用程序是否处于高架状态?

socket()失败时,使用WSAGetLastError()找出原因,例如:

代码语言:javascript
复制
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
    printf("WSAStartup failed: %d\n", iResult);
    return 1;
}

SOCKET fd = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
if (fd == INVALID_SOCKET) {
    printf("creating socket failed: %d\n", WSAGetLastError());
    return 1;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35770129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档