음.
리눅스 서버에서, 간단한 데몬을 만들고 있는데요,
황당한 문제가 있어서 질문 드립니다.
UDP Socket 을 생성하고, 이를 Bind 할때, port 번호를 0 으로 할당하면,
임의의 빈 port 번호를 할당한다고 알고 있는데요,
정상적으로 작동하지 않아서, 확인을 해 보니,
port 번호가 0 번으로 bind 가 되어 있더군요. -_-;
이게 정상적인 상황인가요?
특이한건, syslog 함수를 호출한 위치를 이곳 저곳 옮기면,
0 으로 bind 되기도 하고, 제대로된 포트 번호가 할당되기도 한다는 것입니다.
지금은 아예 임의로 1025 번부터 할당에 성공할때까지 룹을 돌도록 해 놨는데요,
음.. 이런 비슷한 문제를 겪으신 분이 혹시 계신가요? ;;;
UDP 소켓을 bind 할 때 포트 0 을 주면 커널이 빈 포트를 골라 줘야 정상입니다. 0 번으로 잡힌다면 bind 전에 주소 구조체를 제대로 초기화하지 않았거나, bind 결과를 getsockname 으로 확인하지 않은 경우가 많습니다.
memset 으로 구조체를 0 으로 채우고, bind 후 getsockname 으로 실제 포트를 확인하세요.