Mono 3.12에서 요청 기반 스트리밍 프로토콜을 구현하기 위해 Socket
을 사용하여 Socket.SendAsync(SocketAsyncEventArgs)
을 사용하고 있습니다. 여러 데이터 버퍼를 설정하려면 SocketAsyncEventArgs.BufferList
을 사용하고 있습니다. Socket
및 SocketAsyncEventArgs
에 대한 문서에서 BufferList의 모든 바이트를 전송하지 않고도 TCP 소켓 SendAsync 작업을 완료 할 수 있습니까?
BufferList
를 사용하는 경우 모든 바이트가 우리가
SocketAsyncEventArgs.BytesTransferred
에 대해 검증 할 필요가 인상을 떠나 보내지 않고
SocketAsyncEventArgs.Completed
제기 할 수 있는지 여부에 대한 언급을 찾을 수 없습니다. 한편
는
Socket.BeginSend
는 응용 프로그램이
BeginSend
를 호출하면 보장
, 시스템은 지정된 콜백 메서드를 실행하는 별도의 스레드를 사용하는 것을 만들고, 할
Socket
까지EndSend
에 블록 요청한 바이트 수를 보내거나 예외를 throw합니다.
은 사양은 SocketAsyncEventArgs.BufferList
와 SendAsync
를 사용하는 경우 전송 된 바이트의 수에 대해 어떻게 보증을합니까?
이벤트가 SocketError.Success
으로 완료되었다고 가정합니다.
"소켓 오류없이 'SocketAsyncEventArgs.Completed' 핸들러를 호출 할 수 있습니까?'e.BytesTransferred! = length'?" .NET Framework에서 수집 할 수없는 것은 http://stackoverflow.com/questions/28675811/when-i-call-wsasend-will-all-the-data-be-sent와 http : // stackoverflow입니다. .com/questions/14347708/calling-wsasend-in-completion-port – jorgebg
테스트 용 코드를 제공 할 수 있습니까? –
@DieterMeemken 답변을 테스트하기 위해 무엇을 테스트해야합니까? 사양이 어떻게 보장합니까? 필자가 언급했듯이,'SendAsync'와'BufferList'를 가진'SocketAsyncEventArgs'를 사용하고 있습니다. –