小编Tej*_*tul的帖子

在MSG_DONTWAIT模式下使用recvfrom()从原始套接字读取以太网数据包

我正在使用原始套接字通过recvFrom() 在C 中发送和接收以太网数据包。我想以非阻塞模式读取,所以我使用 MSG_DONTWAIT。但无论是否收到数据包,recvFrom() 始终返回 -1。我是 C 编程新手。我能够接收我的有效负载,但总是收到消息“接收资源暂时不可用”。

代码片段:

    if ((sock = socket(AF_PACKET, SOCK_RAW, htons(0x8851))) < 0) { 
       perror("ERROR: Socket");
       exit(1);
    }


    while(1) {
       int flag=0;
       n=recvfrom(sock, buffer, 2048, MSG_DONTWAIT, NULL, NULL);

       if (n == -1) {
           perror("ERROR: Recvfrom");
           close(sock);
           flag=1;

       } 

       if (flag==0)  {
        // Read Packet

       }
    }
Run Code Online (Sandbox Code Playgroud)

c sockets linux raw-sockets

5
推荐指数
1
解决办法
3334
查看次数

标签 统计

c ×1

linux ×1

raw-sockets ×1

sockets ×1