2013-03-28 4 views
0

간단한 클라이언트/서버 응용 프로그램을 테스트하고 있습니다. 클라이언트 측의 유닛 테스트는 서버를 필요로하지만, 응답이 끊어지는 것처럼 보입니다 (개별 테스트는 작동하지만 둘 이상은 작동하지 않습니다).포트 번호로 소켓을 닫을 수 있습니까?

내 tearDown()의 일부로 서버 소켓을 닫는 것이 좋을 것이라고 생각했지만 클라이언트 코드에서 서버 개체에 액세스 할 수있는 방법이 없으므로 간단한 작업 : serverSocket.close(). 즉, 포트 번호만으로 소켓이 실행중인 포트 번호를 알 수 있습니다. 소켓을 사용하는 객체가 어디에/어떻게 존재하는지에 관계없이 소켓을 닫을 수 있습니까? 아마 사소한 질문 ... 덕분에 무엇 죄송

...

나는 다른 관련 문제는 생각 ... 나는 이미 사용중인 포트 번호를 기반으로 소켓을 만들 수 있습니까?

+0

두 번째 질문을 이해하지 못합니다. 기존 포트와 충돌하지 않는 무료 포트를 선택 하시겠습니까? –

답변

0

아니요 포트를 닫으려면 서버 소프트웨어를 얻어야합니다.

유일한 다른 대안은 서버를 죽이는 것입니다. 포트가 열려있는 프로세스를 lsof 또는 netstat로 식별 한 다음 프로세스를 종료 할 수 있습니다. 그것은 항구를 자유롭게하는 잔인한 방법입니다. 귀하의 경우 소프트웨어를 정지하지 않는 것이 훨씬 낫습니다!

0

소켓이 처리중인 경우 모든 파일 설명자를 0에서 getrlimit(RLIMIT_NOFILE)까지 반복하고 각각에 getsockname()을 호출하면됩니다. 호출이 성공하고 포트 번호가 일치하면 포트 번호로 소켓을 찾았습니다. (하지만 포트 번호가 같지만 다른 주소에 바인드 된 여러 소켓이있을 수 있습니다).

+0

소켓이 진행 중이고이 작업이 필요한 경우 리팩토링을해야합니다. –

+0

@NicholasWilson 그러나 나는 적절한 언어를 사용하여 시작할 것입니다.)))) –

관련 문제