Member 14499788 Ответов: 1

Как я могу исправить ошибку с помощью функции ASSERT в программировании сокетов windows?


Каждый раз, когда я пытаюсь отладить проект, в котором я написал функцию Accept, я получаю утверждение, ведущее к sockcore.cpp-да.
Я не могу понять, что мне делать дальше...
Может ли кто - нибудь предложить, что я должен изменить в коде?...

Что я уже пробовал:

**********УТВЕРЖДАТЬ*********************
Отладочное Утверждение Не Удалось!
d:\agent\_work\3\src\vctools\VC7Libs\Ship\ATLMFC\SrcMFC\sockcorre.cpp
Линия:183

Дополнительные сведения о том, как ваша программа может вызвать сбой утверждения, см. В документации Visual C++ по утверждениям.

(Нажмите кнопку повтор для отладки приложения)
***************************************


функция accept, которую я пробовал..
void CFileDlg::OnAccept()
{
BOOL bRet = m_sListener.Принять(m_connected );
если (Брет != TRUE)
{
uErr = GetLastError();
wsprintf(szError, L"Accept failed: %d", uErr);
AfxMessageBox(szError);
}
еще {

CSingleLock singleLock(&m_critsec, TRUE);
m_sharedData.bConnectClient = истина;

}

Richard MacCutchan

Вы должны сказать нам, какой вызов функции дает ASSERT и на какое значение он жалуется. Кроме того, когда происходит нормальная ошибка, то, что возвращает GetLastError. Пожалуйста, помните, что мы не можем видеть, что происходит, когда вы запускаете свой код, вам нужно предоставить все детали.

Member 14499788

GetLast возвращает нулевую ошибку, если мы нажмем на повтор в файле ASSERT, то это приведет от основного проекта к следующему sockcore.cpp

BOOL CAsyncSocket::Accept(CAsyncSocket& rConnectedSocket,
SOCKADDR* lpSockAddr, int* lpSockAddrLen)
{
Он указывает на нее---- - >ASSERT(rConnectedSocket.m_hSocket == INVALID_SOCKET);
ASSERT(CAsyncSocket::FromHandle(INVALID_SOCKET) == NULL);

CAsyncSocket::AttachHandle(INVALID_SOCKET, &rConnectedSocket);
if (CAsyncSocket::FromHandle(INVALID_SOCKET) == NULL)
{
// Вызов AttachHandle не удался
возвращать false;
}

SOCKET hTemp = accept(m_hSocket, lpSockAddr, lpSockAddrLen);

Richard MacCutchan

Утверждение, по-видимому, подразумевает, что ваш сокет недействителен. Таким образом, вы должны делать что-то ранее в коде, который терпит неудачу. Единственный способ отследить эти проблемы-это отлаживать шаг за шагом и проверять каждое значение по ходу работы.

Member 14499788

хорошо, спасибо! Я попробую.

1 Ответов

Рейтинг:
1

Member 14499788

Наконец я получил ответ, я по ошибке создал функцию Create() и Connect для сокета, принимающего соединение тоже.
Спасибо вашему Ричарду за ваши предложения!!

Овации