이미 다른 프로그램에서 사용중인 포트로 HalfNetwork 초기화 할때 에러 메시지를 볼 수 없습니다.

65 views
Skip to first unread message

TTF(허승욱)

unread,
Jul 4, 2011, 9:19:39 AM7/4/11
to HalfNetwork
HalNetwork를 공부하고 있는 중에 궁금한점이 생겼습니다.

다른 프로그램에서 TCP 10000번 포트를 이미 사용하고 있을 때,

HalfNetwork 라이브러리로 10000번 포트 서버를 만들면,

에러 메시지 표시되는 부분이 없이 정상적으로 진행됩니다.

하지만 이미 다른 프로그램에서 포트를 사용하고 있기 때문에, HalfNetwork 에서 사용할 수 없습니다.

이지현

unread,
Jul 4, 2011, 10:22:24 AM7/4/11
to halfn...@googlegroups.com
일단 half networklib의 ProactorConnector::Open()을 보시면 무조건 true를 반환하는걸 보실 수 있으며, 

half networklib에 포함된 ACE 버젼 코드 중 win32_Asynch_IO.cpp의 2376line 에 보시면 ACE_WIN32_Asynch_Operation::Open을 사용하는 부분이 있는데, 이 함수가 어떤 경우든 -1을 리턴하고 있습니다.  내부적으로 리턴값 처리하는 부분은 일단 주석처리 되어있는걸 확인하실 수 있습니다.

어렴풋한 기억으로 무조건 -1로 리턴되는 원인을 몰라서 일단 주석 처리하고 어플리케이션 단에서 오픈된 포트를 관리하는 쪽으로 이야기를 했던 것 같습니다. 시간되면 원인 찾아봐야지 했는데 ^^a .. 아직도 못하고 있네요. 

일단 참고 해두세요. 이번엔 꼭 찾아봐야겠군요. ^^

2011년 7월 4일 오후 10:19, TTF(허승욱) <zone...@gmail.com>님의 말:

허승욱

unread,
Jul 4, 2011, 10:53:55 AM7/4/11
to halfn...@googlegroups.com
답변 감사드립니다.

저도 저 부분에 대해서 살펴보고, 공부하도록 하겠습니다.

2011년 7월 4일 오후 11:22, 이지현 <ljh...@gmail.com>님의 말:

허승욱

unread,
Jul 4, 2011, 3:10:20 PM7/4/11
to halfn...@googlegroups.com
문제점으로 추측되는 소스를 찾았습니다.

ProactorAcceptor.cpp에서
bool ProactorAcceptor::StartListen()
{
    ...
    ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT("acceptor open")), 1);
    ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT("acceptor open")), 0);
    ...
}

빨간색 부분과 같이 1 -> 0으로 수정하고 테스트 한 결과
이미 점유된 port일 경우 NetworkInit False가 정상적으로 출력됩니다.


2011년 7월 4일 오후 11:53, 허승욱 <zone...@gmail.com>님의 말:
Reply all
Reply to author
Forward
0 new messages