Skip to content

03 09 수업 정리

ozt88 edited this page Mar 9, 2015 · 8 revisions

C++ 에서 try catch 쓰지마라

  • 오류가 관리되는 언어 (java, c#등) 과는 달리 제대로된 오류 상태를 받을 수 없음.
    ex) java 나 c#의 경우 메모리 문제(ex: out of index)가 있는 쓰기를 하는 순간 exception 발생,
    c++은 메모리 문제가 있는 주소를 읽는 순간에 exception이 발생한다.
  • try catch는 발생하는 경우 상위 호출 스택으로 돌아가서 처리하기 때문에 실제 문제 발생한 부분의 정보를 얻기 힘들다.
  • try catch의 쓰임새 : 오류 검출이 아니라, 오류 봉합을 위함.
  • c++에서는 오류 당시 프로시저의 메모리. dmp파일을 찍어서

TCP에서 데이터 전송량은 미리 알 수 없다

  • AsyncSelect활용한 서버에서 send는 원하는 사이즈 만큼 못보내거나, 못읽은경우
    FD_READ / WRITE 이벤트에서 다시 못 보낸 데이터 처리해야한다.
  • 위의 경우 session과 session별 버퍼를 활용한다.
  • recv / send의 버퍼사이즈가 충분히 크지 않으면, 시스템 콜이 많아져서 총 처리량이 적어질 수 있다.

AsyncSelect의 이벤트 발생 시점

  • FD_WRITE : 해당 소켓의 커널 send 버퍼에 빈 공간이 있는 경우.
  • FD_READ : 해당 소켓의 커널 recv 버퍼에 읽어야할 데이터가 있는 경우.