Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2015, 11:06   #1
Hellyeah
Пользователь
 
Регистрация: 06.04.2014
Сообщений: 13
По умолчанию

Добрый день.

Имеется асинхронный udp сервер.

В колбэке функция endreceivefrom(ar, ref clientEP) время от времени выдает исключение, судя по логам и времени падения программы это исключение о том что "Существующее соединения было принудительно закрыто"

Пример функции
Код C#
Код:
private void DataReceive(IAsyncResult ar) {
...
int bytes = 0;
EndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint clientEP = (EndPoint)sender;
try
{
    bytes = socket.endReceiveFrom(ar, ref clientEP);
}
catch (Exeption ex)
{
   log.write(ex.Message);
}
finally
{
   EndPoint newClientEP = new IPEndPoint(IPAddress.Any, 0);
   socket.BeginReceiveFrom(data, 0, data.Length, SocketFlags.None, ref newClientEP, DoReceiveFrom, newClientEP);
}
 
...... //Обработка полученных данных и ответ.
}
По факту оно работает. Но если начинают спамить таким образом, то вылетает исключение. Я так понимаю что, обработчик не успевает ловить все исключения или может у него есть ограничение на кол-во одновременно обрабатываемых исключений.

Вопрос: Что делать в такой ситуации?

И вот еще логи из EventViewer Windows:
Цитата:
EventType clr20r3, P1 Program.exe, P2 2.0.5497.37840, P3 54bd4670, P4 system, P5 4.0.0.0, P6 5073c71b, P7 2f72, P8 d4, P9 system.net.sockets.socket, P10 NIL.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
И вот еще:
Цитата:
Application: Program.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Net.Sockets.SocketException
Stack:
at System.Net.Sockets.Socket.DoBeginRe ceiveFrom(Byte[], Int32, Int32, System.Net.Sockets.SocketFlags, System.Net.EndPoint, System.Net.SocketAddress, System.Net.Sockets.OverlappedAsyncR esult)
at System.Net.Sockets.Socket.BeginRece iveFrom(Byte[], Int32, Int32, System.Net.Sockets.SocketFlags, System.Net.EndPoint ByRef, System.AsyncCallback, System.Object)
at WindowsFormsApplication2.Program.Da taReceived(System.IAsyncResult)
at System.Net.LazyAsyncResult.Complete (IntPtr)
at System.Threading.ExecutionContext.r unTryCode(System.Object)
at System.Runtime.CompilerServices.Run timeHelpers.ExecuteCodeWithGuarante edCleanup(TryCode, CleanupCode, System.Object)
at System.Threading.ExecutionContext.R un(System.Threading.ExecutionContex t, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.R un(System.Threading.ExecutionContex t, System.Threading.ContextCallback, System.Object)
at System.Net.ContextAwareResult.Compl ete(IntPtr)
at System.Net.Sockets.BaseOverlappedAs yncResult.CompletionPortCallback(UI nt32, UInt32, System.Threading.NativeOverlapped*)
at System.Threading._IOCompletionCallb ack.PerformIOCompletionCallback(UIn t32, UInt32, System.Threading.NativeOverlapped*)

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

Последний раз редактировалось Stilet; 22.01.2015 в 11:34.
Hellyeah вне форума Ответить с цитированием
Старый 22.01.2015, 11:36   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Я так понимаю что, обработчик не успевает ловить все исключения или может у него есть ограничение на кол-во одновременно обрабатываемых исключений.
Ерунда. Ставлю на то, что исключение у вас в блоке finally возникает, где оно ничем и не обрабатывается
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 22.01.2015, 11:38   #3
Hellyeah
Пользователь
 
Регистрация: 06.04.2014
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
Ерунда. Ставлю на то, что исключение у вас в блоке finally возникает, где оно ничем и не обрабатывается
Соглашусь, если запустить в дебаге, то после вылета подсвечивается строка beginReceive в блоке finally. Есть решение?

Точнее как его там обрабатывать? И если не секрет почему оно вылетает?
Hellyeah вне форума Ответить с цитированием
Старый 22.01.2015, 11:44   #4
Hellyeah
Пользователь
 
Регистрация: 06.04.2014
Сообщений: 13
По умолчанию

Код:
finally
{
   EndPoint newClientEP = new IPEndPoint(IPAddress.Any, 0);
   socket.BeginReceiveFrom(data, 0, data.Length, SocketFlags.None, ref newClientEP, DataReceive, newClientEP);
}
Опечатка на формуме. В коде все нормально!
Hellyeah вне форума Ответить с цитированием
Старый 22.01.2015, 11:48   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Решение чего? У вас выпадает исключение, вы его не ловите, все как вы и написали в коде. А если вы не этого хотели, то определяйтесь с требованиями и пишите как вам надо.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.01.2015, 11:52   #6
Hellyeah
Пользователь
 
Регистрация: 06.04.2014
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Решение чего? У вас в finally выпадает исключение, вы его не ловите, все как вы и написали в коде. А если вы не этого хотели, то определяйтесь с требованиями и пишите как вам надо.
Я же задал конкретный вопрос.

1) Почему там вылетает исключение?
2) Как его можно обработать, так что бы программа не упала, а продолжила принимать и отправлять пакеты? Еще писать try{}catch{}finally{} ?? А если во второй обработке снова вылетит, писать же обработчики до посинения не будешь?
Hellyeah вне форума Ответить с цитированием
Старый 22.01.2015, 12:02   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
1) Почему там вылетает исключение?
Потому что этот метод может кидать исключения. Все случаи выкидывания их описаны тут https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx
Цитата:
2) Как его можно обработать
Не вызывать его или делать это в try catch. (try catch допустим и внутри finally)

Цитата:
так что бы программа не упала а продолжила принимать и отправлять пакеты?
Это от программы зависит и причины исключения.

Цитата:
А если во второй обработке снова вылетит, писать же обработчики до посинения не будешь?
Дык может и не надо их писать?
Ну и цикл можно использовать если уж надо ждать до посинения.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.01.2015, 12:15   #8
Hellyeah
Пользователь
 
Регистрация: 06.04.2014
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Потому что этот метод может кидать исключения. Все случаи выкидывания их описаны тут https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx

Не вызывать его или делать это в try catch. (try catch допустим и внутри finally)


Это от программы зависит и причины исключения.


Дык может и не надо их писать?
Ну и цикл можно использовать если уж надо ждать до посинения.
Alex11223, спасибо большое. Вариант с циклом попробую.

И все же есть какое то объяснение этого исключения?

То что этот метод может выдавать исключения это и так ясно.
Но у исключения должна быть причина вызвавшая его.
Можете ли вы предположить какая причина исключения в данном контексте?
Hellyeah вне форума Ответить с цитированием
Старый 22.01.2015, 12:18   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Читайте сообщение исключения (и InnerException'ов если есть) и описание метода по ссылке выше, особенно раздел Remarks.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.01.2015, 12:34   #10
Hellyeah
Пользователь
 
Регистрация: 06.04.2014
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Читайте сообщение исключения (и InnerException'ов если есть) и описание метода по ссылке выше, особенно раздел Remarks.
Спасибо за информацию!
Hellyeah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необработанное исключение nik-maximal Visual C++ 0 23.04.2014 16:45
Необработанное исключение. fredwriter Visual C++ 2 19.04.2014 05:52
Необработанное исключение в 0x77de4621 JackyBrown Win Api 5 13.04.2013 18:34
Необработанное win 32 исключение произошло cska Косторных Помощь студентам 2 05.01.2013 22:41
Необработанное исключение Faton 11 Общие вопросы C/C++ 4 31.10.2012 00:29