2011-01-15 4 views
5

더 큰 소프트웨어를위한 작은 서버 루프를 개발하고 있지만 원하는대로 작동하지 않습니다. 내가 스레드에게 다음과 같은 방법으로 시작Boost :: Asio를 사용하여 스레드 된 서버 루프 중지

try { 

while (true) { 
     acceptor.accept(socket); 
     const size_t buffersize = 1024; 
     char data[buffersize+1] = {0}; 
     data[socket.read_some(boost::asio::buffer(data,buffersize))] = '\0'; // Write data & place terminator 
     boost::thread asyncWriting(boost::bind(&myClass::writeToFile, this)); 
     socket.close(); 
} 

} catch(const boost::system::system_error& e) { 
    cout << "Boost System Error: " << e.what() << endl; 
} 

:

serverThread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&myClass::startServer, this))); 

을하지만 문제가

".quit"의 사용자 유형 내가 소프트웨어가이 스레드 서버 루프를 중지 할

"서버"를 중지합니다. 아무리 내가 스레드를 중단하면, 소켓을 닫고 및/또는 수용체하거나 프로그램 부스트을 깰 오류가 발생합니다 :

Bad file descriptor 

그것은 때마다 발생하지만 자주하지 않습니다 내가 그 문제를 해결하고자하고 그것을 무시하는 것이 아닙니다.

내 컴퓨터를 종료하는 방법을 알려주세요. ?

+0

디버거를 연결하고 예외가 발생 어디 있는지 말할 수 있다면 도움이 될 것입니다. 'boost :: system :: error_file_descriptor' 오류 코드와 함께'boost :: system :: system_error'를 던질 수있는 여러 asio 메소드가 있습니다. –

답변

2

일반적으로 서버가 작성된 사용하여 비동기 메서드

  • async_accept
  • async_read
  • async_write

이 경우 종료에 제안 된 기술은 대기중인 모든 비동기 작업이 stopio_service이다 ' 이벤트 처리 루프. 당신은 그것은 당신이 당신의 문제가 어디에 게시 한 제한된 코드를 기반으로 나에게 분명하지 년대 ~io_servicedocumentation

The destruction sequence described above permits programs to simplify their resource management by using shared_ptr<>. Where an object's lifetime is tied to the lifetime of a connection (or some other sequence of asynchronous operations), a shared_ptr to the object would be bound into the handlers for all asynchronous operations associated with it.

에 특별한주의를 지불해야합니다, 당신이 가지고있는 더 많은 코드를 게시하거나 실행 좋을 것 valgrind 아래에있을 수 있습니다.

난 당신이 찾을 수있는 몇 일 전에 similar question 대답 유용

+0

안녕 샘, 대답 해줘서 고마워! 또한 오늘 Google 검색에서 질문을 발견했지만이 방법을 사용해야하는지 여부는 확실하지 않았습니다. 하지만 한 번 살펴보고 비동기로 만들고 내 경험을 여기 써 보겠습니다. – Paul

+0

완벽하게 작동했습니다. io_service.stop()의 도움으로 수락자를 바인드하고 안전하게 끝낼 수 있다는 것을 아는 것이 중요했습니다. – Paul

+0

@Paul 위대한! 다행 이네. 너를 도울 수있어서 좋았어. –

관련 문제