TcpListener

Rust 싱글스레드 TCP 서버 병목

TcpListener::bind로 포트를 열고 incoming()에서 TcpStream을 하나씩 처리하면, 읽기·쓰기·sleep 중인 요청이 다음 연결을 막습니다.

블로킹 질문

handle_connection(stream)이 반환되기 전까지 accept 루프가 다음 클라이언트를 처리하지 못하는가?

bind

TcpListener::bind("127.0.0.1:7878")는 Result를 반환합니다. 포트 사용 중이면 unwrap panic 대신 에러를 처리합니다.

accept

for stream in listener.incoming()은 연결마다 Result<TcpStream>을 줍니다. Err는 네트워크 실패 신호입니다.

read

BufReader::new(&mut stream).read_line 또는 lines로 요청 라인을 읽고, 빈 줄에서 HTTP 헤더 끝을 구분합니다.

write

write_all과 flush로 상태줄, Content-Length, 본문을 씁니다. 느린 클라이언트는 이 지점에서 전체 루프를 붙잡습니다.