2013-09-28 5 views
2

현재 버퍼를 보내면 부분적으로 만 전송되고 보낸 바이트 수를 반환 할 수 있다는 점에서 문제가 있습니다. 몇 가지 옵션이나 sth를 설정할 수있는 방법이 있습니까? 그게 bsd 소켓이 부분적으로 보내는 것을 막는가?버퍼를 원자 적으로 보내는 방법() 때문에 디스패치되지 않습니다.

+0

TCP 코킹을 시도 할 수 있습니다. UDP는 항상 완전한 데이터 그램을 보내야합니다. –

+0

나는 코르크 마개가 힌트 일 뿐이라고 믿습니다. 확실히 모든 부분 전송을 막을 수는 없습니다. –

답변

2

일반적으로 TCP와 같은 소켓 유형 SOCK_STREAM을 사용하면이 작업을 수행 할 수 없습니다. SOCK_DATAGRAM (IP의 경우 이것은 UDP를 의미 함) 및 SOCK_SEQPACKET (IP의 경우 해당 없음)은 원하는대로 할 수 있지만 자신의 한계가 다릅니다.

어떤 경우 든 해결책은 데이터 버퍼링과 프레이밍을 수행해야한다는 것입니다. 즉, 수신자가 의도 한 "패킷"경계를 재구성 할 수 있도록 보내는 스트림에 대역 내 정보를 포함시켜야합니다.