| [ 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()를 같이 사용하지 못하는지, 아니면 더 설정해야 하는 부분이 있는지 알려주세요. 질문이 난해한가요?? ^^; |