В каком сценарии EndSend получит SocketException?

Согласно MSDN Socket Метод .EndSend может генерировать SocketException для сокета, использующего протокол, ориентированный на соединение. Когда ?

Я протестировал несколько сценариев, и ни один из них не вызвал SocketException.

Сценарий 1. Приложение вызывает BeginSend, и во время отправки данных приложение вызывает BeginDisconnect/Disconnect
. Результат: Socket не отправляет FIN, пока не будут отправлены все данные. , и EndSend выполнено успешно.

Сценарий 2: приложение вызывает BeginSend, и пока оно отправляет данные, сокет получает RST от удаленной конечной точки.
Результат: сокет прекращает отправку данных, вызывает обратный вызов и EndSend< /em> успешно сообщает, что все байты отправлены. Не понимаю, почему?

Когда метод Socket.EndSend создает SocketException для протокола, ориентированного на соединение?


person Chris    schedule 06.04.2014    source источник


Ответы (1)


Я знаю, что это вызывает ошибку, если соединение было разорвано (в отличие от упорядоченного отключения). Вы должны быть в состоянии воспроизвести это поведение, потянув за сетевой кабель. Если вы не можете, пожалуйста, опубликуйте код.

person usr    schedule 07.04.2014
comment
Я отключил сетевую карту, используемую сокетом, который отправлял данные, и при вызове EndSend он выдал SocketException - person Chris; 07.04.2014