2013-02-26 3 views
2

많은 양의 데이터를 클라이언트에 보내야하는 서버 응용 프로그램을 개발 중입니다. 그러나 클라이언트는 언제든지 연결이 끊어 질 수 있으며 소켓의 send()/write()는이 경우 오류를 반환합니다. 클라이언트가 다시 연결될 때 중단 된 위치에서 데이터를 계속 보낼 수 있도록 연결이 끊어지기 전에 실제로 얼마나 많은 데이터가 배달되었는지 확인하고 싶습니다.TCP/IP 소켓을 사용하여 대상에 얼마나 많은 데이터가 전달되었는지 확인

소켓 API를 사용하여 확인할 수 있습니까?

답변

6

아니요, 소켓 API는이 정보를 제공하지 않습니다. 사실, 이것을 일반적으로 알 수는 없습니다. 연결이 실패한 특정 방법에 따라 한 쪽의 TCP 스택은 일반적으로 얼마나 많은 데이터가 다른 쪽에서 성공적으로 만들어 졌는지 알 수 없습니다. 그것이 알 수있는 유일한 것은 얼마나 많은 데이터가 인정되었는지이며, 이는 동일한 것이 아닙니다. 그리고 TCP/IP 이외의 다른 것들 (로컬 OS, 원격 OS, 원격 프로세스, 원격 애플리케이션 로직)이 실패했을 수도 있다는 것을 고려할 때, TCP 수준에서 확인 된 데이터의 양은 아마도 아무 의미도 없을 것입니다 .

원격 엔드가받은 데이터를 수신 확인하고 성공적으로 처리 (적용 가능한 경우 커밋)하려면 엔드 투 엔드 응용 프로그램 프로토콜을 사용해야합니다.

+0

나는 이런 식으로 밝혀지는 것에 대해 사과했다. 대답 해 주셔서 감사합니다! –

관련 문제