recv() 함수가 아무 응답도 보내지 않는 이유는 무엇인가요?
break point를 통해 echo server 과정을 조정하던 중 send()를 보낼 때 ack 응답이 돌아온다는 것을 알게되었습니다.
저는 recv()로 데이터를 받아 ack 응답을 보내는 줄만 알았는데 아니였더군요...
recv()로 응답하지 않는다면 데이터가 제대로 전송되어 버퍼에 저장되었음을 알 수 없는 것 아닌가요?
send()에서만 응답 받았음을 알리는 이유가 궁금합니다.
답변 2
0
ACK 응답은 소켓 수준에 확인할 수 있는 것이 아닙니다. 어떤 근거로 send() 함수 호출 시 ACK 응답이 돌아온다는 것을 확인하신 걸까요? 메모리 디버깅을 통해서 볼 수 있는 것은 아니고 Wireshark 같은 패킷 수집 및 분석 소프트웨어를 이용해야 ACK 응답을 알 수 있을 텐데요.
그리고 TCP ACK 응답은 잘 받았다는 신호입니다. 그 신호는 recv() 함수가 아니라 OS 수준에서 보냅니다. 아마도 몇몇 이론에 혼란이 있었던 것 같습니다.
참고하시기 바랍니다. :)
1
넵 wireshark를 통해서 확인했습니다.
send()를 통해 보내고 recv()를 통해 받아야지만 통신이된다고 생각했습니다.
이후 찾아보면서 이해한 과정인데 혹시 틀린게 있는지 궁금합니다.
send()를 통해 os 수준의 네트워크 버퍼에 저장되어 네트워크를 통해 전달되고 수신자에 소켓 버퍼에 카피되어 저장됩니다. 이후 recv()를 통해 그 데이터를 가져올 수 있습니다.
이 과정이 맞는건가요?
recv, send 리턴값 질문
0
78
2
스타,워크와 같은 디스창 (Disconnected)도 비정상 종료에 대응하는 시스템으로 봐야할까요?
0
96
2
수업과 관련해서 읽어볼 만한 책 있나요?
0
112
1
서버가 끊어버리는것에 대한 질문
0
122
2
TCP 의도적 장애 테스트 질문
0
159
2
shutdown()을 호출하는 이유
0
165
1
프로토콜이 적용된 파일 송신 서버에서 send, recv 질문 있습니다!
0
153
2
"파일 송신 서버 제작" 강의 질문입니다!
0
152
2
대표적인 장애 유현 2
0
131
2
대표적인 TCP 장애 유현
0
161
2
이벤트 기반 파일 입출력과 callback 기반 파일 입출력이 네트워크에도 쓰이는 기법인가요?
0
121
2
개발환경 질문이 있습니다.
0
137
1
TCP/IP vs UDP , 멀티 스레드에서의 병목 현상에 대한 질문이 있습니다!
0
221
2
메모리 관련 문제로 질문드립니다.
0
187
2
테스트 환경 질문드립니다!
0
168
2
ThreadAcceptLoop 의 우아한(?) 종료에 대해 질문드립니다.
0
419
2
하트비트 시 서버에서의 연결 종료
0
451
2
강사님 질문 드립니다.
0
249
1
소켓 입/출력 설계 정리
0
450
1
멀티스레드 기반 서버 관련 질문..!
0
412
2
빅 엔디언과 리틀 엔디언
0
378
2
TIME_WAIT 관련 문의드립니다.
0
226
1
강사님 강의자료 인쇄용으로 부탁드립니다.
0
288
1
bind 함수 관련 궁금증
0
357
2





