ping 소스에서..

psjcap의 이미지

ping 소스를 보니.. icmp 헤더에 id에 자기 자신의 process id를 넣더군요..
그리고 recvfrom 할 때 id가 자기자신거랑 다르면 그냥 버리던데요..

만약 두 프로세스에서 ping을 쏠 경우..
내가 보낸 ping에 reply가 다른 프로세스로 가 버려서..
내가 못 받는 경우가 생길 수 있나요..??

ping 프로그램을 여러개 띄워놓아도 그런 경우는 생기지 않는거 같은데..

그럼 한수 부탁드립니다..

jyj9782의 이미지

로우소켓으로 받거든요, 로우소켓으로 받는다는것은 두 프로세스이상에서 똑같이 받아들인다는거에요..

즉.. icmp 패킷을 받아 출력하게 한 간단한 소스로요..

두개를 각각 터미날에 켜두죠..

그리고 핑을 날렸을때..

아래와 같은 결과를 얻게됩니다.

프로세스 1
root@testbed:~/socket# ./icmp
ICMP TYPE=8 CODE=0 CHECKSUM=23626
ICMP TYPE=8 CODE=0 CHECKSUM=23625
ICMP TYPE=8 CODE=0 CHECKSUM=23624
ICMP TYPE=8 CODE=0 CHECKSUM=23623

프로세스 2
root@testbed:~/socket# ./icmp
ICMP TYPE=8 CODE=0 CHECKSUM=23626
ICMP TYPE=8 CODE=0 CHECKSUM=23625
ICMP TYPE=8 CODE=0 CHECKSUM=23624
ICMP TYPE=8 CODE=0 CHECKSUM=23623

로우소켓이기 때문에, 각각의 프로세스는 동일한
데이타를 받게 되고, 한쪽의 ping 에서..

id 필드와 프로세스 id 가 다르다면, 즉..
자신(핑)이 보낸 패킷이 아니라면, 무시하는겁니다.

무시한다는건 return; 으로 처리했던데요.

즉 더이상 안받는다는 뜻입니다.

그럼 다른 프로세스도 동일한 데이타를 받을테고..

한쪽에서만 받는다는.. 1:1 연결과는 다르죠..

그래서 드랍되는게 아니라.. 동시에 둘다 받는겁니다..

:=)

힘내세요.