버그 해결을 위한 모든 질문을 던져
0 votes
404 views
서버 모델 : IOCP

프로토콜 : TCP

 

서버를 Sleep()으로 의도적으로 몇초간 정지한 다음, 정지된 서버로 특정 클라이언트가 패킷을 여러개 보내게 해봤는데 정지상태때 해당 클라이언트가 처음 보낸 패킷빼고는 서버가 패킷을 못받고 패킷이 그냥 사라지던데 이게 원래 맞는건가요? 아니면 제가 뭔가 잘못한것인지... 여쭤보고 싶습니다.

 

예시) 서버의 모든 쓰레드를 의도적으로 5초간 Sleep(), 그 사이에 클라이언트가 0~ 11번까지 패킷 전송 , 정지가 풀리고 서버에서는 GetQueuedCompletionStatus()함수가 호출되어 0번 패킷만을 수신, 다음번 클라이언트가 12번 패킷을 전송하면 1~11번까지 패킷은 서버가 읽지 못하고 GetQueuedCompletionStatus()가 호출되어 12번패킷부터 수신
asked (2 point) , 404 views

2 answers

+3 votes
TCP 패킷은 사라지지 않습니다.  byte배열은 뭉탱이로 뭉쳐서 오거나, 조각조각 들어올 수 있습니다.

이 처리가 미비하면 패킷이 유실된 것처럼 보일 수 있지요.
answered (151 point)
0 votes
Recv함수의 의미는 커널에 존재하는 recv buffer에서 복사를 한다는 뜻입니다.

동기와 비동기의 차이는 인위적인 Buffer로 다시 복사하느냐, 아니면 다이렉트로 받아지느냐 차이입니다.

즉, Sleep이 일어나도 어차피 커널에서는 recv buffer에 쌓였으니깐 Sleep이 끝난뒤에 Recv를 받으면 쌓인 순서대로 받아질겁니다.
answered (12 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

307 질문
431 answers
423 댓글
882 users