Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / ClientSocket / 4 сообщений из 4, страница 1 из 1
25.04.2005, 03:28
    #33032477
archez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ClientSocket
Добрый день!

Кто может подсказать, почему не срабатывает такой код:
...
try
{
ClientSock1->Open(); // открываю сокет
}
catch(...)
{
ShowMessage("Ошибка при отккытии сокета");
}
...

Я хочу отловить исключительную ситуацию в случае возникновения ошибки при открытии сокета, но программа благополучно проскакивает секцию try{}catch(...){}. В результате вместо корректной обработки исключительной ситуации значительно позже я получаю системное сообщение об ошибке.
...
Рейтинг: 0 / 0
25.04.2005, 09:55
    #33032619
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ClientSocket
То, что сокет не открылся не является исключительной ситуацией.
Надо проверять ClientSock1->Active, если true, то открылся, в противном случае - нет.
...
Рейтинг: 0 / 0
26.04.2005, 03:07
    #33034609
archez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ClientSocket
независимо от того осуществляю я проверку или нет, при неудачной попытке открытия сокета получаю:

...exception class ESocketError with message "Asynchronous socket error 10061"...

Впечатление, что ClientSock1->Open(), выполняется в другом потоке, и флаг ClientSock1->Active, выставляется позже, в зависимости от результата попытки открытия сокета. Соответственно возврат в программу (из ClientSock1->Open()) происходит еще до того, как известен результат попытки.

Например, такой код всегда выводит сообщение "No!".

//------------------------------------
ClientSock1->Open();
if(ClientSock1->Active)
ShowMessage("Ok!");
else
ShowMessage("No!");
//------------------------------------

через секунду выполняю:

//------------------------------------
if(ClientSock1->Active)
ShowMessage("Ok!");
else
ShowMessage("No!");
//------------------------------------

и если открытие сокета прошло нормально (т.е. если я не получил сообщения типа ...exception class ESocketError with message "Asynchronous socket error 10061"... ) получаю сообщение "Ok!"
...
Рейтинг: 0 / 0
26.04.2005, 04:14
    #33034624
archez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ClientSocket
Хм... Похоже разобрался. Нужно свойство "ClientType" выставить в "ctBlocking"
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / ClientSocket / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]