c++ - setsockopt 错误 WSAEADDRNOTAVAIL

标签 c++ c winapi sockets setsockopt

来源:

WSADATA WSAData; 
SOCKET sock;
if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0) {
    printf("\nProblem with WSAStartup\n\n");
    return FALSE; 
}
if ((sock = WSASocket(AF_INET,SOCK_RAW,IPPROTO_TCP, 0, 0, WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET) {
    WSACleanup();
    printf("\nProblem with WSASocket\n\n");
    return FALSE;
}
int flag = 1;
if (setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&flag,sizeof(flag)) == SOCKET_ERROR) {
    printf("getsockopt failed with error: %u\n\n", WSAGetLastError());
    closesocket(sock);
    WSACleanup();
    return FALSE; 
}

每次我在程序中运行它时,我都会得到:

getsockopt failed with error: 10049

10049 是 WSAEADDRNOTAVAIL 的错误代码,表示“请求的地址在其上下文中无效。”

请帮忙,我不知道为什么我总是收到此错误。

最佳答案

您在调用 WSASocket() 时指定了无效协议(protocol),请尝试将 IPPROTO_TCP 指定为:

WSASocket(AF_INET,SOCK_RAW,IPPROTO_TCP, 0, 0, WSA_FLAG_OVERLAPPED)

关于c++ - setsockopt 错误 WSAEADDRNOTAVAIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13555147/

相关文章:

c++ - 查找应用程序处理程序?

winapi - 标准COM编码(marshal)处理程序失败,并显示REGDB_E_IIDNOTREG

c++ - opencv如何获得轮廓的中线

请求从 C++ 到非标量类型的转换

c++ - 参数列表中的 void_t 有效但不作为返回类型

c - 在 C 中不用递归查找字符串长度

c - 用于跟踪的系统库?

c - 尝试从 matlab 调用 dll 函数导致崩溃

c - 为什么当我减小窗口大小时发送 WM_ERASEBKGND 消息?

c++ - 为什么这个被零除错误只发生在优化代码中?