패킷 크기에 제한이 있나요?

101 views
Skip to first unread message

풍류협객

unread,
Mar 17, 2010, 9:26:09 PM3/17/10
to HalfNetwork
8192 바이트 크기의 패킷을 송수신하는 것을 테스트해보고 있는데요.

다음과 같은 에러가 납니다.

> TestServer.exe!_NMSG_WRITE(int rterrnum=10) 줄 198 C
TestServer.exe!abort() 줄 59 + 0x7 바이트 C
TestServer.exe!ACE_OS::abort() 줄 44 C++
TestServer.exe!ACE_Log_Msg::log(const wchar_t *
format_str=0x006bb39c, ACE_Log_Priority log_priority=LM_ERROR, char *
argp=0x0109ec1c) 줄 2085 C++
TestServer.exe!ACE_Log_Msg::log(ACE_Log_Priority
log_priority=LM_ERROR, const wchar_t * format_str=0x006bb328, ...) 줄
953 + 0x14 바이트 C++
TestServer.exe!__ace_assert(const char * file=0x006b95e0, int
line=119, const wchar_t * expression=0x00d68c98) 줄 21 + 0x19 바이트 C++
TestServer.exe!
HalfNetwork::FlexibleSizePoolT<HalfNetwork::MessageBlockPool,ACE_Message_Block>::Allocate(const
unsigned int bufferSize=8192) 줄 119 + 0x5a 바이트 C++
TestServer.exe!HalfNetwork::NetworkFacade::AllocateBlock(const
unsigned int bufferSize=8192) 줄 298 C++
TestServer.exe!HalfNetwork::ServiceImpl::AllocateBlock(unsigned int
size=8192) 줄 76 C++
TestServer.exe!HalfNetwork::ProactorService::_InitializeRead() 줄
198 + 0x12 바이트 C++
TestServer.exe!HalfNetwork::ProactorService::open(void *
handle=0x000006a4, ACE_Message_Block & __formal={...}) 줄 78 C++
TestServer.exe!
ACE_Asynch_Acceptor<HalfNetwork::ProactorService>::handle_accept(const
ACE_Asynch_Accept::Result & result={...}) 줄 319 + 0x21 바이트 C++
TestServer.exe!ACE_WIN32_Asynch_Accept_Result::complete(unsigned int
bytes_transferred=0, int success=1, const void *
completion_key=0x00000000, unsigned long error=0) 줄 1975 + 0x13 바이트 C+
+
TestServer.exe!
ACE_WIN32_Proactor::application_specific_code(ACE_WIN32_Asynch_Result
* asynch_result=0x00d16c58, unsigned int bytes_transferred=0, const
void * completion_key=0x00000000, unsigned long error=0) 줄 647 + 0x3d
바이트 C++
TestServer.exe!ACE_WIN32_Proactor::handle_events(unsigned long
milli_seconds=4294967295) 줄 632 C++
TestServer.exe!ACE_WIN32_Proactor::handle_events() 줄 557 + 0x14 바이트
C++
TestServer.exe!ACE_Proactor::handle_events() 줄 746 + 0x23 바이트 C++
TestServer.exe!ACE_Proactor::proactor_run_event_loop(int
(ACE_Proactor *)* eh=0x00000000) 줄 471 + 0x8 바이트 C++
TestServer.exe!HalfNetwork::ProactorTask::svc() 줄 40 C++
TestServer.exe!ACE_Task_Base::svc_run(void * args=0x00c79c0c) 줄 275
+ 0xf 바이트 C++
TestServer.exe!ACE_Thread_Adapter::invoke_i() 줄 149 + 0x9 바이트 C++
TestServer.exe!ACE_Thread_Adapter::invoke() 줄 98 + 0xf 바이트 C++
TestServer.exe!ace_thread_adapter(void * args=0x00c93e28) 줄 124 +
0xf 바이트 C++
TestServer.exe!_callthreadstartex() 줄 348 + 0xf 바이트 C
TestServer.exe!_threadstartex(void * ptd=0x00c93ea0) 줄 331 C
kernel32.dll!7c80b699()
[아래 프레임은 올바르지 않거나 누락되었거나 kernel32.dll에 대해 로드된 기호가 없음]
TestServer.exe!ACE_OS::thr_getspecific(unsigned long key=13188768,
void * * data=0x7ffdc000) 줄 2777 + 0xd 바이트 C++


설정파일에

port=25251;
workerthread=0;
receivebufferlength=8192;
updateterm=50;

8192로 설정을 했는데
이 크기 설정은 먹질 않는지 궁금합니다.

제가 자세히 살펴보고 피드백을 드리면 좋으련만
( 시간을 절약하려 HalfNetwork를 사용하고 있는 바 살펴볼 시간이 부족해서 )
그러지 못하는 점 사과드립니다.

YoungGi Lim

unread,
Mar 18, 2010, 2:18:29 AM3/18/10
to halfn...@googlegroups.com
설정파일에서만 변경하면 되는 것으로 기억하는데, 버그가 있나보군요.

제가 1024*4까지만 테스트해서 그런듯 합니다.

소스 어딘가 1024*4로 하드코딩된 부분이 있나 봅니다.

콜스택을 보니 MessageBlockPool 부분 인것 같습니다,

제가 테스트 해보고 정확하게 알려드리겠습니다.

2010/3/18 풍류협객 <dida...@naver.com>

YoungGi Lim

unread,
Mar 18, 2010, 5:26:43 AM3/18/10
to halfn...@googlegroups.com
제가 8192로 놓고 해보니 에러가 재현이 안되는군요. 2배인 16384로 해도 마찬가지 입니다.

전 MessageBlockPool이 문제인가 했는데 현재 8192 바이트까지 지원하고

그 이상 넘어가면 그냥 new를 사용합니다.

패킷을 하나만 보내도 에러가 나는지, 계속 보내다 보면 에러가 발생하는지, 리눅스인지 윈도우인지

좀 더 자세히 설명해주시거나 소스가 단순하면 메일로 보내주시면 해결에 도움이 되겠습니다.

2010/3/18 YoungGi Lim <javaw...@gmail.com>
Reply all
Reply to author
Forward
0 new messages