[winsock][BUG CHECK] Чтение из закрытого порта подключения. Ошибка WinSock: 0

Вчера замутил инструкцию по загрузке данных из FireBird в Excel.

Многократно нарывался на %subj%.

Проблему давил OK-еем. Она не сильно мешала достижения финиша.

Позже сообразил, что она уже вылазила. Причем совсем недавно.

В том случае, проблема лечилась указанием имени пользователя в верхнем регистре (GAMER) — это (насколько я понимаю) задействовало SRP-аутентификацию. А с нижним регистром через раз отрабатывала Legacy_Auth аутентификация.

Но вчера SYSDBA был в верхнем регистре!

Сегодня пару раз попробовал воспроизвести вчерашнюю проблему в Excel — не воспроизводится.

Полез в код провайдера, посмотреть где эта ошибка выкидывается.

 const int n=m_spProvider->m_recv.point()
              (m_hSocket,
               reinterpret_cast<char*>(pv),
               icb,
               RemoteFB__INET_StaticCfg::c_FB_RECV_FLAGS);

 if(n==SOCKET_ERROR)
 {
  const int winsockErr=m_spProvider->m_WSAGetLastError.point()();

  //! \todo
  //!  Process interupt error?

  // ERROR - failed to read from INET port
  t_ibp_error exc(E_FAIL,
                  ibp_mce_winsock__failed_to_read_from_port_1,
                  IBP_CreateCustomErrorFor_CnFailed());

  exc<<winsockErr;

  exc.raise_me();
 }//if n==SOCKET_ERROR

 if(n==0)
 {
  const int winsockErr=m_spProvider->m_WSAGetLastError.point()();

  // ERROR - [BUG CHECK] read from closed socket?

  t_ibp_error exc(E_FAIL,
                  ibp_mce_winsock__bug_check__read_from_closed_port_1,
                  IBP_CreateCustomErrorFor_CnFailed());

  exc<<winsockErr;

  exc.raise_me();
 }//if

Выкидывается она, когда recv возвращает 0.

… В общем, думаю, надо последовать правилу:

А потом будем разбираться.

Leave a Comment