我试图向远程网络发送ICMPV6消息,作为第一步,我尝试在一个简单类(SendICMPv6.c)中创建一个ICMPv6套接字,其中包含winsock2、ws2tcpip、stdio和stdlib头。但我无法创建套接字。有人能帮上忙吗?
守则是:
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");
}有人能解决这个问题吗?
发布于 2016-03-03 12:05:46
如果仔细阅读文档,您可以检查以下几个选项:
SOCK_RAW套接字吗?
如果Winsock服务提供程序支持AF_INET或AF_INET6地址家族的AF_INET6套接字,则应将SOCK_RAW的套接字类型包含在WSAEnumProtocols函数为一个或多个可用传输提供程序返回的信息结构中。您需要在代码中添加更多的错误检查。例如,如果socket()失败:
如果没有发生错误,套接字将返回引用新套接字的描述符。否则,将返回INVALID_SOCKET的值,并且可以通过调用WSAGetLastError检索特定的错误代码。
发布于 2016-03-03 23:42:45
SOCK_RAW需要管理权限。您的应用程序是否处于高架状态?
当socket()失败时,使用WSAGetLastError()找出原因,例如:
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;
}https://stackoverflow.com/questions/35770129
复制相似问题