안녕하세요.

소켓 프로그래밍을 하던 중 이상 증상이 발생하여 질문 드립니다.

 

타겟 보드에 리눅스를 올리고, 간단한 UDP 통신 프로그램을 구현하였습니다.

sendto()를 이용하여 1472바이트를 전송하며, 데이터는 0부터 FF로 순차적으로 채워져 있습니다.

그런데 데이터를 윈도우 wireshark에서 캡쳐하면 아래 그림과 같이 데이터 중간 부분부터 전부 0으로 채워져 있으며,

그 결과 UDP 헤더의 Checksum 에러가 발생하여 해당 데이터를 윈도우에서 실행중인 프로그램이 수신하지 못합니다.

이미지 1.jpg

 

 

UDP 통신 프로그램은 socket()함수로 소켓을 생성하고, sendto() 함수를 호출하는 형태로 아주 단순합니다.

리눅스 PC에서 프로그램을 실행하면 정상적으로 데이터가 수신되는 것으로 보아, 소스는 이상이 없다고 판단됩니다.

그리고 위 그림에서 Checksum 값 0x9adb는 sendto() 함수로 전달한 데이터에 대한 Checksum이 맞는 것 같습니다.

리눅스 PC에서 전송된 데이터에서는 저 값이 나오거든요.

 

그래서, 소켓 라이브러리나 좀 더 로우 레벨에서의 문제가 아닌가 생각이 되는데, 제가 리눅스는 처음 작업하는 거라서, 어떻게 접근해야할지 감이 안잡힙니다.

고수분들의 많은 조언을 부탁드립니다.

 

제 작업 환경은 다음과 같습니다.

- 타겟 보드 : Atmel AT91SAM9263

- 커널 버전 : 3.2.6

- 크로스 컴파일러 : gcc 4.6.3, eabi

- 파일시스템은 BuildRoot를 컴파일하여 사용합니다.

 

감사합니다.