2009-03-23 4 views
1

SocketAsyncEventArgs에 할당 된 byte[] 버퍼의 데이터를 항상 Socket.SendAsync에 보냅니 까? 일부 코드는 테스트했지만 로컬 네트워크에서만 테스트 했으므로 그럴 것 같습니다..Net SendAsync는 항상 모든 데이터를 보냅니 까?

편집 :
항상 Ok입니다. 완료된 이벤트를 실행하기 전에 항상 모든 데이터를 보냅니 까? 만약 내가 기억

유일한 socket.BeginSend

은하지 않았다 ..

답변

1

그것은 MSDN의 문서에서, 그러나, 모든 데이터를 전송하려고 시도합니다 :

"메시지 지향 소켓은 Windows 소켓 기본 서비스 제공자의 최대 메시지 크기를 초과하지 않는 데이터 인 경우. 원본 서비스 공급자를 통해 기본적으로 지나치게 길면 데이터가 전송되지 않고 SendAsync 메서드는 SocketAsyncEventArgs.SocketError가 네이티브 Winsock WSAEMSGSIZE 오류 코드 (10040)로 설정된 SocketException을 throw합니다. "

너무 큰 버퍼를 분할해야하는 경우가 있습니다. 기본 소켓 구현에 따라 다릅니다.

+0

버퍼 크기를 감지하는 방법이 있습니까? 아니면 안전한 크기가 있습니까? – Peter

1

없음은하지 않습니다를. 여기에는 버퍼링, 시간 초과 등을 비롯한 많은 요소가 고려됩니다.

IPV4 수준의 패킷에 대한 제한이 있지만 가장 고려해야 할 사항은 다음과 같습니다. IPV4 패킷은 65535 바이트를 초과 할 수없는 엄격한 제한이 있습니다. 따라서 SendAsync가 IPV4 패킷 크기보다 큰 데이터를 단일 패킷으로 푸시 할 수 없습니다.

관련 문제