0
나는 소켓 연결을 받아들이고 그 연결에서 들어오는 데이터를 수신하는 ACE 리액터가 있습니다. 반응기는 전용 실에서 작동합니다. 이유는 "중단 된 시스템 호출"이라고 -1 errno
보고서를 잠시 run_reactor_event_loop
종료에 한 번ACE Reactor가 중단 된 시스템 호출에서 종료
int TcpServer::svc()
{
LogDebug("The TCP server on %i is running", mLocalAddr.get_port_number());
// The current thread will own the reactor. By default, a reactor is owned by
// the creating thread. A reactor cannot run from not owning thread.
if (mReactor.owner(ACE_Thread::self()) != 0)
{
LogThrow("Could not change the owner of the reactor");
}
if (mReactor.run_reactor_event_loop() != 0)
{
LogWarning("Reactor loop has quit with an error.");
}
return 0;
}
:이 스레드의 입력 기능입니다. 상황을 어떻게 처리 할 수 있습니까? 알다시피 나는 두 가지 옵션이 있습니다 : run_reactor_event_loop
을 다시 호출하거나 sigaction
및 SA_RESTART
을 사용하여 중단 된 호출을 다시 호출하도록 구성하십시오.
run_reactor_event_loop
으로 다시 전화해도 안전합니까?- ACE_Reactor :: restart 메서드의 기능은 무엇입니까? 루프를 다시 시작해야하는 것 같습니다. 도움이 될까요?
- 켜는 것이 얼마나 안전합니까?
SA_RESTART
? 예를 들어,^C가 내 응용 프로그램을 중단시키지 않는다는 것을 의미합니까? - 상황을 처리하는 다른 방법이 있습니까?
소스 코드를 살펴 보았습니까? –
@Peter G., 그랬습니다. ACE_Reactor :: handle_events()가 -1을 반환하면 -1을 반환합니다. 코드가 복잡해 지긴하지만 더 깊이 파헤 치려고합니다. – FireAphis
디버깅을 했습니까? – DumbCoder