LabHub
배우기 러닝패스 코스

연결 하나가 느려지자 나머지가 전부 멈췄다 · 보낸 만큼 다 나가지 않는다 · 퀴즈

퀴즈: 보낸 만큼 다 나가지 않는다

LabHub 에서 이어서 보기

문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.

  1. send 가 20바이트 가운데 3을 돌려줬다면?

    1. 나머지 17바이트는 커널이 알아서 마저 보낸다
    2. 헤더가 잘못됐다는 뜻이므로 연결을 끊는다
    3. 20바이트가 상대에게 모두 도착한 것이다
    4. 3바이트만 나갔으므로 나머지를 들고 있어야 한다
  2. 보낼 것이 없는데 쓰기 준비를 계속 지켜보면?

    1. 다중화 호출이 즉시 돌아와 루프가 헛돈다
    2. 커널이 그 소켓을 관심 목록에서 자동으로 뺀다
    3. 읽기 준비 통지가 함께 사라진다
    4. 송신 버퍼가 가득 찰 때까지 아무 일도 없다
  3. 개행이 아직 없는 조각을 받았을 때 올바른 처리는?

    1. 잘못된 입력이므로 연결을 끊는다
    2. 받은 조각을 버리고 다음 조각을 기다린다
    3. 완성된 줄이 없으므로 조각을 보관한다
    4. 개행을 붙여 한 줄로 만들어 처리한다
  4. 레벨 트리거에서 읽기 준비마다 recv 를 한 번만 불러도 되는 이유는?

    1. 한 번의 recv 가 버퍼를 반드시 비우기 때문에
    2. 한 번만 부르면 부분 수신이 생기지 않기 때문에
    3. 커널이 남은 데이터를 다음 연결로 옮기기 때문에
    4. 남은 데이터가 있으면 다음에 다시 깨워 주기 때문에
  5. 부분 송신 버그가 시험에서 잘 드러나지 않는 이유는?

    1. 시험은 언제나 논블로킹 소켓을 쓰지 않기 때문에
    2. 작은 응답은 대개 한 번에 다 나가기 때문에
    3. 시험 환경에서는 send 가 예외를 내기 때문에
    4. 작은 응답은 커널이 모아서 한 번에 보내기 때문에
  6. 관심 이벤트를 다시 계산하기에 알맞은 두 시점은?

    1. 연결을 받을 때와 연결을 닫을 때
    2. 요청을 해석한 뒤와 응답을 기록한 뒤
    3. 보낼 것을 큐에 넣은 직후와 보내기를 마친 직후
    4. 유휴 검사를 시작할 때와 끝낼 때