Конференция "Сети" » Как подавить ошибку подключения ClientSocket
 
  • Layner © (16.05.08 09:36) [0]
    Есть ClientSocket / ServerSocket. Если ServerSocket не запущен, в приложении ClientSocket выдает ошибку 10061. Как ее подавить? Ставил


    ClientSocket1.Address := '192.168.0.1'
    ClientSocket1.Port := 1010;  
    try
    ClientSocket1.Active := True  
    except
    //сюда не попадаю!
    end;


    Наверное на OnError надо отлавливать? Подскажите пожалуста ;)
  • Layner © (16.05.08 09:38) [1]
    Вернее, ошибку то отлавливать, но не выдавать в приложении системную модальную ошибку, а для себя ее записать в журнал и дальше работать.
  • Reindeer Moss Eater © (16.05.08 09:49) [2]
    На OnError не пробовал F1 нажать?
  • Layner © (16.05.08 09:56) [3]
    Reindeer Moss Eater Спасибо огромное за ответ!!!
    в OnError вставил ErrorCode := 0; все устраивает.
  • Сергей М. © (16.05.08 10:54) [4]

    > вставил ErrorCode := 0; все устраивает.


    Будет устраивать до тех пор, пока не получишь ошибку WSAENOBUFS.
    А рано или поздно ты ее получишь обязательно.

    Минимальный обработчик ошибки коннекта кроме вышеупомянутой строчки должна включать еще одну строчку:

    Socket.Close;

    В противном случае происходит утечка ресурсов, связанных с теряемым дескриптора гнезда
  • Layner © (16.05.08 13:24) [5]
    Сергей, спасибо!
  • kami © (17.05.08 21:05) [6]
    Сергей М. ©   (16.05.08 10:54) [4]
    > Будет устраивать до тех пор, пока не получишь ошибку WSAENOBUFS.
    > А рано или поздно ты ее получишь обязательно.

    Сергей, а почему (в смысле - в результате чего, "почему" написано в MSDN) может возникнуть эта ошибка?
  • Сергей М. © (18.05.08 14:12) [7]
    Это объясняется логикой, реализованной в самом компоненте, точнее - в классе TCusomWinSocket.

    Почему Борланд автоматически не закрывает сокет при возникшей в ходе коннекта ошибке, я не знаю, но это факт. Возможно, Борланд все же руководствовалась при этом какими-то резонными соображениями.

    Количество одновременно существующих сокетов в контексте одного процесса - величина, имеющая предел, зависящий от ресурсов, которые система может выделить процессу при тех или иных условиях. Закрытие сокета ведет к освобождению ассоциированных с ним ресурсов, незакрытие, соответственно, к неосвобождению.
  • kami © (18.05.08 21:21) [8]
    То есть, WSAENOBUFS возникнет при долгой (либо очень активной) работе приложения, создающего гнезда в неумеренных количествах.
    Понял, спасибо.
 
Конференция "Сети" » Как подавить ошибку подключения ClientSocket
Есть новые Нет новых   [134432   +19][b:0][p:0.001]