none
операция блокирования прервана вызовом wsacancelblockingcall RRS feed

  • Вопрос

  •                 while (true)
                    {
                        IPEndPoint remote = null;
                        byte[] message = udp.Receive(ref remote);
                        ShowMessage(Encoding.Default.GetString(message));
                        if (stopReceive == true) break;
                    }


    В данном коне на строке

    byte[] message = udp.Receive(ref remote);

    при закрытии приложения выдает ошибку "операция блокирования прервана вызовом wsacancelblockingcall".

    Как ее исправить?

    18 июля 2014 г. 12:53

Ответы

  • Исключение - не всегда что-то страшное :) Это лишь корректный способ сообщить программе, что задача по каким-то причинам не выполнена. Важно, чтобы программа умела правильно "ловить" исключения, а не падать на необработанном исключении. Если Ваша программа закрывается, какая разница, что будет с сокетом. Тем более, что Receive - блокирующий вызов, его в любом случае нужно как-то терминировать. Так что, "правильный" способ искать вряд ли стоит :)


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа N_Smirnov 19 июля 2014 г. 7:43
    18 июля 2014 г. 19:11

Все ответы

  • В данном коне на строке
    Может "в окне" :) В каком окне? При закрытии приложения все дескрипторы файлов закрываются (в том числе и сокеты). Соответственно, вызов метода Receive прерывается и Вы должны получить исключение. Ловите его и обрабатывайте, тогда "лишних" сообщений не будет.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    18 июля 2014 г. 14:28
  • На данном участке "кода")))

    Исключение я изначально поставил на вывод сообщения...

    Я наверное неправильно сформулировал вопрос. Как избежать этого исключения?

    Из Вашего ответа я так понимаю что у меня не правильно закрываются сокеты...

    Если правельно закрыть сокеты то этого сообщения не будет?( Разобраться бы как)))))) пока что убрал вывод сообщения в исключении... ).

    18 июля 2014 г. 14:56
  • Исключение - не всегда что-то страшное :) Это лишь корректный способ сообщить программе, что задача по каким-то причинам не выполнена. Важно, чтобы программа умела правильно "ловить" исключения, а не падать на необработанном исключении. Если Ваша программа закрывается, какая разница, что будет с сокетом. Тем более, что Receive - блокирующий вызов, его в любом случае нужно как-то терминировать. Так что, "правильный" способ искать вряд ли стоит :)


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа N_Smirnov 19 июля 2014 г. 7:43
    18 июля 2014 г. 19:11