UDP Socket 에서 이해가 않가는 현상이 생겼습니다.

sozu의 이미지

UDP로 소켓 프로그래밍을 하는데 왜 이런지 이유를 찾지 못해서 질문을 합니다.

상황
0. 간단한 테스트용 어플 제작중입니다.
1. 하나의 UDP 소켓으로 Send/Recv를 모두 수행합니다.
2. 하나의 Thread에서는 Event가 있을때마다 Send를 수행합니다.
3. 다른 Thread에서는 Recv 함수가 블럭되어 받기를 대기하고 있습니다.

현상
- Send에서 현재 바인딩되어있는 소켓이 없는 Ip/port로 전송을 하면 다른 Thread에 있는 Recv에서 Error(-1)를 리턴합니다.

상황 1. 에서 Send/Recv를 다른 소켓으로 하면 잘됩니다.

지금까지 프로젝트 하면서, 대부분 하나의 소켓으로 처리했었습니다.

문제점이 무엇인지 알려주셨으면 합니다^^

익명 사용자의 이미지

Recv에서 -1을 반환했을 때의 errno 값을 보시는게 좋을 것 같습니다.

Send 실패시 SIGPIPE로 인해 인터럽트가 걸리지 않았을까 합니다.

terzeron의 이미지

두 쓰레드가 같은 소켓을 공유하고 있는 건 확실하죠?

interrupted system call 문제일 수도 있습니다.