沏渡 2024-01-11 13:24 采纳率: 0%
浏览 11

winsock原始套接字编程总是报错setsockopt failed with error 10049

在调用setsockopt()函数设置套接字IP_HDRINCL时,总是报错10049是什么原因呢?已经卡在这里两天了始终没搜到解决办法,请问有清楚的吗

img

下图是我创建和绑定套接字的代码片段↓

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-11 16:02
    关注

    【以下回答由 GPT 生成】

    根据您的描述,问题是在使用winsock进行原始套接字编程时,调用setsockopt()函数设置套接字IP_HDRINCL时总是报错10049。以下是我为您提供的解决方案:

    1. 确保已正确初始化winsock库:
    #include <winsock2.h>
    #include <ws2tcpip.h>
    
    int main() {
        WSADATA wsaData;
        if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
            printf("Failed to initialize winsock.\n");
            return 1;
        }
    
        // 其他代码
    }
    
    1. 在创建套接字时,使用正确的协议类型和套接字类型:
    SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
    if (sock == INVALID_SOCKET) {
        printf("Failed to create socket. Error code: %d\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }
    
    1. 调用setsockopt()函数之前,确保套接字已绑定到正确的本地地址:
    SOCKADDR_IN localAddr;
    localAddr.sin_family = AF_INET;
    localAddr.sin_addr.s_addr = INADDR_ANY;
    localAddr.sin_port = 0;
    
    if (bind(sock, (SOCKADDR*)&localAddr, sizeof(localAddr)) == SOCKET_ERROR) {
        printf("Failed to bind socket. Error code: %d\n", WSAGetLastError());
        closesocket(sock);
        WSACleanup();
        return 1;
    }
    
    1. 设置套接字选项IP_HDRINCL:
    int flag = 1;
    if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag)) == SOCKET_ERROR) {
        printf("Failed to set IP_HDRINCL option. Error code: %d\n", WSAGetLastError());
        closesocket(sock);
        WSACleanup();
        return 1;
    }
    

    请确保按照以上步骤执行,并将相关错误代码打印出来。如果问题仍然存在,请提供完整的问题描述和代码片段,以便我们能够更好地帮助您解决问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月11日

悬赏问题

  • ¥15 运动会成绩管理系统的设计与实现
  • ¥15 matlab支持向量机使用错误
  • ¥99 利用C/C++语言,使用TCP/IP协议,编一个简易聊天程序
  • ¥15 如何使用python 实现对串口/dev/ttyUSB0进行上锁,使得该串口只能在一个python脚本中使用,其他脚本不能操作这个串口
  • ¥15 晶体塑性有限元——Damask求解
  • ¥30 设计一个图形用户界面来控制你机械臂的运动
  • ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
  • ¥15 前端返回pdf时不显示内容
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题