Member 13450992 Ответов: 1

Почему отображается ошибка сокета 10014?


у меня есть одна проблема, это 10014 erorr!!
я пытаюсь проверить память и значения сокетов, что вы об этом думаете?
что я должен делать ? пожалуйста, помогите мне....!

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

#include "cUDPReceiver.h"


cUDPReceiver::cUDPReceiver(void)
{
}


cUDPReceiver::~cUDPReceiver(void)
{
}
void cUDPReceiver::Initializing(SOCKET		_socket )
{
	m_socket = _socket;
	ZeroMemory(&m_overlapped,sizeof(m_overlapped));

	m_nFlags = 0;	
	m_wsaBuf.len		= BUF_SIZE;
	m_wsaBuf.buf		= m_buf;

	OnRecv();
}
void cUDPReceiver::OnRecv()
{
	DWORD   dwBytes = 0, dwFlags = 0;
	int returnValue = 0;

	ZeroMemory(&m_overlapped,sizeof(m_overlapped));
	ZeroMemory(&m_lastSenderAddr,sizeof(m_lastSenderAddr));
	m_addrSize = sizeof(m_lastSenderAddr);

	m_wsaBuf.buf		= m_queueBuffer.GetBufferPoint();
	m_wsaBuf.len		= m_queueBuffer.GetRecvBytes();	

	__LOCK;
	returnValue = WSARecvFrom(m_socket,
		&m_wsaBuf,
		1,
		&dwBytes,
		&dwFlags,
		(SOCKADDR *)&m_lastSenderAddr,
		&m_addrSize, 
		&m_overlapped,
		NULL);

	__UNLOCK;

	if ( returnValue ==  SOCKET_ERROR )
	{
		if( WSAGetLastError() != WSA_IO_PENDING )
		{		
			//WSACleanup();
			OnRecv();
		}
	}
}
void cUDPReceiver::OnSend(SOCKADDR_IN		_addr, char* pData,const int _nSize)
{
	DWORD   dwBytes = 0;
	int returnValue = 0;

	__LOCK;

	m_wsaBuf.buf = pData;
	m_wsaBuf.len = _nSize;    

	returnValue = WSASendTo(m_socket, &m_wsaBuf, 1,
		&dwBytes, 0, (SOCKADDR *) & _addr,
		sizeof(_addr), &m_overlapped, NULL);

	__UNLOCK;

	if( returnValue == SOCKET_ERROR)
	{
		if(WSAGetLastError() != WSA_IO_PENDING)
		{
			printf("Error - fail wsasend \n");
		}
	}
}
void cUDPReceiver::SetLength(DWORD _dwSize)
{
	m_wsaBuf.len = _dwSize;
	m_queueBuffer.PushData(_dwSize);
}
char*		cUDPReceiver::GetBuffer()
{
	return m_queueBuffer.PopData();
}
SOCKADDR_IN cUDPReceiver::GetLastAddr()
{
	return m_lastSenderAddr;
}

void cUDPReceiver::Dispatch(char* pData)
{
}

1 Ответов

Рейтинг:
2

OriginalGriff

Если вы не понимаете сообщение об ошибке, погуглите его: 10014 ошибка сокета - поиск Google[^]
Верхняя ссылка объясняет, что означает эта ошибка: Коды Ошибок Сокетов Windows (Windows)[^]

Цитата:
WSAEFAULT
10014
Плохой адрес.
Система обнаружила недопустимый адрес указателя при попытке использовать аргумент указателя вызова. Эта ошибка возникает, если приложение передает недопустимое значение указателя или если длина буфера слишком мала. Например, если длина аргумента, который является структурой sockaddr, меньше, чем sizeof(sockaddr).


Итак, теперь вы знаете, что означает сообщение об ошибке, начните использовать отладчик, чтобы посмотреть на ваш код во время его выполнения, чтобы выяснить, какой указатель дает проблему и на что он указывает.
Мы не можем сделать это за вас: у нас нет никакого доступа к вашей системе, пока ваш код работает!


Member 13450992

спасибо за комментарий к моему вопросу и ваш совет!
но я не знаю этой ошибки, сколько бы ни читал msdn
Итак, я проверил адрес памяти, но адреса нигде нет...

OriginalGriff

Сообщение об ошибке довольно ясно: Проверьте свои указатели в отладчике и выясните, на что вы указываете.
Я не могу сделать это за вас - это нужно рассматривать во время выполнения вашего кода, а это возможно только в вашей системе с помощью отладчика.