작성
·
180
0
1. 소켓 송수신 버퍼가 실제로 TCP 단에서 다루는 버퍼가 되는 것인가요?
2. send() 함수가 실패하는 경우는 송신 버퍼가 가득 차는 경우인데 수신 측에서 recv를 하지 않는 경우를 제외하고 어떤 경우에 실패하는지 너무 궁금합니다.
3. 실제로 유저 애플리케이션 계층에서 송신 데이터가 많다고 할 때 TCP가 어느 정도 속도로 송신버퍼를 비우는지(얼마나 빨리 보내주는지) 알기 위해서 어떤 정보를 확인해야 될까요?
답변 1
1
1. TCP 단에서 다루는 커널 버퍼는 따로 있습니다.
2. 주로 수신측 커널버퍼가 다 찼는데 유저레벨로 복사를 해서 비워주지 않을 때 실패합니다.
그 외 커널을 close해버리거나, 다양한 상황이 있을 수 있지만 일반적이진 않습니다.
3. TCP 프로토콜 상에서 알아서 전송 속도를 조절해주기 때문에 우리가 신경쓸 필요는 없습니다.
컨텐츠 단에서 알고 싶다면 recv/send 완료할 때 기록을 남겨서, 비정상적인 경우 연결을 끊는 것을 고려할 수 있습니다.