Как я могу исправить ошибку с помощью функции 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
хорошо, спасибо! Я попробую.