2011-08-01 5 views
4

Socket.IOControl(IOControlCode.DataToRead, null, outValue);을 호출하여 소켓의 수신 버퍼에있는 데이터의 양을 알 수 있습니다.얼마나 많은 데이터가 소켓의 송신 버퍼에 있는지 알려주는 방법

Socket의 송신 버퍼에있는 데이터의 양을 알려주는 등가물이 있습니까?

대역폭 및 대기 시간이 제한된 네트워크에서 최대한 많은 UDP 패킷을 보내야하며 송신 버퍼가 오버플로되는 상황에 처해 있습니다. 따라서 일부 제한 유형을 구현해야합니다.

답변

3

UDP 소켓에는 송신 버퍼가 없습니다. UDP에 대한 SO_SNDBUF 소켓 옵션의 의미는 전송할 수있는 데이터 그램의 크기 제한입니다. 커널은 대개 NIC 당 패킷 대기열을 가지고 있지만 모든 프로토콜에 대해 결합되어 있으며 크기를 쿼리하는 사용자 영역 API는 없습니다. IP 계층, ​​그리고 하드웨어는 패킷을 자동으로 삭제할 수 있습니다. TCP는 어떻게 처리해야하는지 알고 있습니다. UDP는 그렇지 않습니다. 따라서 .Net 또는 다른 Microsoft 기적과 같은 사용자 토큰 라이브러리에서의 버퍼링이 없다면 운이 없어진 것입니다. 수신기는 손실 된 패킷에 대한 송신기에 신호 할

호소가이 요청이 또한 송신자의 시퀀싱 일종의 갖는 의미 등 다시 TCP 재전송으로 떨어질 것이다.

희망이 도움이됩니다.

+0

대답은 다음과 같습니다. 패킷을 너무 빨리 보내지 마십시오 :-) – tomfanning

0

헤더를 분석 할 수 있습니까? 콘텐츠 길이에 대한 정보가있을 수 있습니다.

관련 문제