소켓 프로그램 문의 (bind error)

글쓴이: 익명 사용자 / 작성시간: 목, 2002/06/20 - 6:42오후
일주일동안 이것때메 헤매고있습니다.
아시는 분 도움의 말씀을 부탁드립니다,
하나의 서버프로그램에서 2개의 소켓을 각각 4001, 4002번으로
바인드하여 listen 하고 있다가
client 접속이 있으면 fork -- execl 조합으로 다른 처리프로그램을
부르도록 하였습니다. (accept 로 얻은 새로운 소켓번호를 전달함)
fork 가 정상적이면 같은 소켓번호 (4001, 4002) 으로의 2중 접속을
방지하기 위해 바로 listen 을 했던 소켓번호를 close 합니다.
그리고 이후 fork 한 차일드프로세서가 종료되면 signal 을 통해
다시 4001, 4002 번 소켓으로 다시 listen 하여 재접속을 대기하도록
구성된 프로그램입니다.
이프로그램을 실험하면
client 에서 4001, 4002 번 포트로 접속하고 끊고 개별적으로 한포트는
잘되는데 동시에 두개의 client 에서 각각 4001, 4002 로 접속한 후
4002번에 연결된 client 프로그램의 접속을 끊으면 서버에서 signal
로 감지후 4002번 소켓을 다시 bind 하려면 -1 만 리턴합니다.
물론 client 에서 4002 번으로 접속을 못합니다.
setsockopt 를 통해 어떤처리를 해주어야 하는지
다른 방법이 있는지
도움바랍니다.
Forums:
SO_REUSEADDR을 써보세요.(내용무)
...^^;
Re^2: SO_REUSEADDR 써 봤는데 역시 안됩니다,
^^
댓글 달기