| [ CnUnix ] in KIDS 글 쓴 이(By): terzeron (microkid) 날 짜 (Date): 2002년 8월 30일 금요일 오전 10시 34분 04초 제 목(Title): Re: bind된 port 풀기(?) 이론적으로는 그런 옵션을 쓰면 되는데, 간단한 TCP 애플리케이션이라면 잘 안 될 겁니다. 2분 동안 기다리시면 port에 대해서 해당 프로세스가 bind를 풀게 되므로 2분 후에는 다시 그 port를 사용하실 수 있습니다. TIME_WAIT 상태에서 기다리는 것 같더군요. 위의 reuse 옵션들을 사용하시려면 단일 프로세스 구조로 되어 있는 프로그램을 다중 프로세스나 다중 쓰레드 구조로 바꾸시고 포트를 공유할 수 있도록 포트 풀(pool)을 만들어놓고 쓰시면 될 겁니다. 리스닝 서버와 커넥션 각각을 담당하는 서버를 fork로 분리하고 리스닝 서버를 죽였다가 다시 띄우면 됩니다. (죽었다가 다시 같은 포트에 bind하려면 bind 전에 reuse 옵션을 지정해야 합니다) 자세한 내용은 스티븐스 지도자 동지의 저서의 SO_REUSEADDR 부분을 참고하시면 됩니다. 프로그램이 훨씬 복잡해지기는 하겠지만 포트 점유에 의한 문제는 피하실 수 있을 겁니다. 간단한 프로그램이라면 굳이 이렇게까지는 안하셔도 될 것 같은데요... Solaris와 BSD에서는 2분 정도만 냅두면 포트를 쓸 수 있게 되더군요. PS. 생각해보니 다중 쓰레드는 잘 안 되겠네요. --- 어떤 성취가, 어떤 조롱이, 또는 어떤 고뇌가 나를 기다리고 있을지 나는 모른다. 나는 아무 것도 모른다. 그러나 나는 아직 과거의 경이로운 기적의 시대가 영원히 과거의 것이 되어 버리지는 않았다는 사실을 굳게 믿고 있다. - Stanislaw Lem - |