No.95 | Windows/Linux socket 프로그래밍시 유의사항 | 08-09-2004 | |
---|---|---|---|
카테고리 : 유틸리티/utilityezTCP와 연결되는 Widnows 또는 Linux용 socket프로그램 개발시 유의해야할 예외 처리 항목들을 정리해보았습니다. 1. Connection close1) Windows- Async socket동작이 지원되기 때문에 상대방의 접속 종료 시 특정 함수가 호출되어 접속 종료 여부를 쉽게 알 수 있습니다. 2) Linux- synchronous socket 동작만이 지원되기 때문에 recv함수의 리턴값이 0인지를 항상 확인해야합니다. 리턴 값이 0 이면 상대방이 접속을 종료한 상태입니다. 2. Connection reset- ezTCP가 리셋되거나, 3분여 정도 동안 네트웍이 끊어져 있는 경우 keep_alive timer에 의해서 ezTCP가 기존 접속을 리셋시킬 수 있습니다. ECONNRESET에러 발생시 참고 하시기 바랍니다. 3. Broken pipe- TCP 데이터 전송 중에 상대방이 접속을 종료하거나 리셋시키면 EPIPE라는 에러가 발생합니다. 연결이 끊어져서 데이터를 계속 전송할 수 없다는 의미입니다. 데이터 전송루틴 작성시 이 문제에 대한 처리를 꼭 하셔야합니다. 4. BSD recv()함수 또는 Windows Receive()함수 사용시 주의사항- recv()나 Receive()함수에서 사용하는 length인수는 데이터 수신용 버퍼의 크기입니다. 즉, 읽어올 데이터의 최대 크기를 커널에게 알려주는 값입니다. 이를 실제 읽어올 데이터의 크기로 잘못 알고계시는 경우가 있으니 주의하시기 바랍니다. 이 함수의 리턴값이 실제 수신된 데이터의 크기입니다. 5. TCP stream의 정확한 이해- TCP는 stream의 개념을 기반으로 데이터 전송이 이루어집니다. send()함수로 전송되는 데이터 블럭의 크기에 상관 없이 연속적인 데이터의 흐름으로 처리된다는 의미입니다. 블럭단위의 데이터 처리 방식을 사용하는 프로그램 개발시 stream의 개념을 잘못 이해해서 잠재적인 버그를 남겨두는 경우가 가끔씩 발생하고있습니다.
6. Listening address 재 사용- PC가 서버로 사용되는 경우 프로그램은 접속 대기용 포트를 bind해야합니다.
See also FAQ No.90 소켓 프로그램을 했는데 데이터가 잘려서 들어옵니다. Related Products |