2009-10-20 3 views
2

내 질문은 매우 간단하며 TCP 프로토콜로 작업하는 비동기 소켓에 관한 것입니다.비동기 소켓을 사용하는 콜백

"BeginSend"메소드로 일부 데이터를 보낼 때 콜백은 언제 호출됩니까?

데이터가 네트워크로 전송 될 때 또는 데이터가 목적지에 도달했음을 확신 할 때 (TCP 사양과 관련되어야 함)?

답장을 보내 주셔서 감사합니다.

키 테.

ps : 내 영어가 약간 나쁘다면 미안 해요 ^^.

MSDN에서

답변

3

:

"응용 프로그램이 BeginSend를 호출하면, 시스템은 지정된 콜백 메소드를 실행하기 위해 별도의 스레드를 사용하고, 소켓 요청 바이트 수를 보내거나 예외를 throw 할 때까지 EndSend에 차단합니다 . "

"데이터가 성공적으로 전달되었음을 나타내지는 않습니다. 전송할 데이터를 보유하기 위해 전송 시스템에서 사용할 수있는 버퍼 공간이 없으면 소켓은 논 블로킹 상태에 있지 않으면 차단됩니다 방법." 콜백을 사용하면 데이터가 출력 버퍼에서 삭제 된 것을 확인하실 수 있습니다이라고

http://msdn.microsoft.com/en-us/library/38dxf7kt.aspx

+0

이것은 BeginReceive/EndReceive와 다릅니다. – Jess

3

(비동기 작업은 호출 스레드가 더가있는 경우 차단되지되지 않도록 별도의 스레드를 사용하여 송신 버퍼의 공간이며 날짜를 보내기 위해 기다려야합니다.) 목적지에 도달 할 것입니다. 그러나 에 아직 도달하지 않은 주소는입니다.

그러나 TCP 프로토콜의 특성 때문에 최종적으로 대상에 도달하게됩니다 (거의 확실합니다).

그러나 타이밍을 위해 콜백 시간이 데이터가 상대방에게 도달하는 시간과 같다고 생각해서는 안됩니다.

+0

두 분 모두에게 감사드립니다. 그게 내가 찾고 있던 바로 그 것입니다. – KiTe

+0

당신은 .. –

관련 문제