CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): guest (guest) <211.106.131.27>
날 짜 (Date): 2003년 1월 20일 월요일 오후 04시 40분 40초
제 목(Title): 리눅스 raw socket 프로그래밍 질문...



  raw socket 으로 ping 패킷을 만들어 보내고 응답을 읽어들이는 

  프로그램을 만드는데 처음에는

  s = socket(AF_INET, SOCK_RAW, proto->p_proto));

  (ICMP 헤더만 데이터 만들어 보내는...)
 
  옵션으로 소켓을 생성한 후 select(), FD_SET() 함수로 recvfrom() 함수를 

  호출했습니다. 결과적으로 ping을 주고받는 기능은 정상동작 했습니다.

  두 번째 실험으로는 

  if((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
  {
                perror("socket");
                return -1;
  }

  if(setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&on, sizeof(on)) < 0)
  {
                perror("setsockopt");
              return -1;
  }

  로 소켓을 생성했습니다.(IP 헤더까지 데이터를 만들어 보내기 위해...)

  나머지 부분은 처음과 동일하게 한 후 실험을 하면 소스 컴과 dest 컴에서는

  핑을 주고 받는 것을 확인할 수 있습니다(tcpdump 프로그램으로..)

  근데 내 프로그램 내에서는 select()에서 timeout이 걸립니다.

  select() timeout 시간은 응답을 기다리는데에 충분한 시간입니다.

  즉 응답 패킷은 정상적으로 오는데 socket fd가 이걸 감지못하는 것 
같은데요.

  setsockopt()함수와 select()를 같이 사용하지 못하는지, 아니면 

  더 설정해야 하는 부분이 있는지 알려주세요.


  질문이 난해한가요?? ^^;
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.