raw socket으로 packet을 수신해 보려는 중인데요

study의 이미지

아래에 code를 올렸습니다.
간단하게 raw socket을 열고, interface를 binding한 후에
binding 된 interface로 packet을 받아보려고 했는데, 뭔가 문제가 있는가봅니다.

실행을 하면, 잠시 아무일도 없다가 아래와 같은 출력이 보이네요.

code는 아래와 같구요

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include <errno.h>
#include <net/ethernet.h>
#include <linux/if_packet.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/select.h>
 
int32_t main(int32_t argc, int8_t *argv[])
{
   int32_t sock;
   int8_t buf[1522];
   int32_t ret;
   int32_t bytes;
 
   sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
   if (sock == -1)
   {
      printf("socket open failed\n");
      return 1;
   }
 
   ret = setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, "ens193", (strlen("ens193")+1));
   if (ret == -1)
   {
      printf("interface binding failed\n");
      close(sock);
      return 1;
   }
 
   while(1)
   {
      bytes = recvfrom(sock, buf, 1522, 0, NULL, NULL);
      if (bytes < 0)
      {
         printf("error in recvfrom\n");
         exit;
      }
      printf("bytes = %d\n", bytes);
   }
 
   close(sock);
   return 0;
}

출력은 아래와 같습니다.

# ./a.out
[잠시 아무일도 없다가]
bytes = 60
bytes = 42
bytes = 134
bytes = 118
bytes = 118
bytes = 118
bytes = 118
bytes = 118
bytes = 118
bytes = 66
...
...
...