Расположение чтения нарушения прав доступа 0xFEEEFEEE (C ++ получает PHP-сокеты)

В основном у меня есть некоторый код на PHP, который просто подключается к моему серверу C ++, который прослушивает порт, отправляет сообщение и затем закрывает сокет.

Я пытаюсь прочитать то, что отправляю, но дело в том, что … если я подключаюсь слишком много раз, сервер C ++ в конечном итоге выдает исключение:

Необработанное исключение в 0x00B6C99B в Server.exe: 0xC0000005: расположение чтения нарушения доступа 0xFEEEFEEE.

В основном, при загрузке страницы в скрипте PHP он подключает сокет (TCP) к серверу C ++, отправляет сообщение и затем закрывает сокет. Так что, если я удержу обновление до того времени, как это будет сделано, примерно 34 раза (число варьируется), я получу исключение.

В стеке я вижу, что некоторые переменные имеют: «udp = ??? format = ???», что очень странно, потому что все они уже определены, понятия не имею, почему стоит знак вопроса.

А также данные, которые я отправляю из PHP:

$message = "hello";

И в местных жителей в Visual Studio данные оказываются:

«Helloðº \ rðº \ rðº \ rðº \ rðº \ rðºîþ« «« «« «« «МТД»

Некоторые другие переменные имеют «Ошибка чтения символов строки», в то время как другие имеют:
«Невозможно прочитать память»

Вот мой код:

double webListen = tcplisten(cst::WEB_PORT, 100, 1);
setnagle(webListen, true);

std::list<double> webUsers;

if (webListen <= 0) {
cout << "Failed to listen on port " << cst::WEB_PORT <<endl;
}
cout << endl << "Server listening on port " << cst::WEB_PORT << endl;

while(1){
double WebUser = tcpaccept(webListen, 1);
if(WebUser > -1){
cout<< "NEW WEB: " << WebUser <<  endl;
webUsers.push_back(WebUser);
}
std::list<double>::iterator it = webUsers.begin();
while (it != webUsers.end())
{
cout << "SOCK: " << *it << endl;
//USE A TRY CATCH!!!
//try{
double Size = receivemessage(*it, 1024, 2); // Messages coming from web users (whether it be from website or someone using api)
if(Size == -1){

}
else if(Size == 0){
cout << "WEB GONE: " << *it << endl;
webUsers.erase(it++);
}
else if(Size > 0){
cout << "SIZE: " << Size << endl;
}
}

}

Исключение происходит, когда он пытается получить доступ к переменной UDP в этой функции:

    int CSocket::receivemessage(int len, CBuffer*destination)
{
if(sockid<0)return -1;
int size = -1;
char* buff = NULL;

if(udp)
{
size = 8195;
buff = new char[size];
size = recvfrom(sockid, buff, size, 0, (SOCKADDR *)&SenderAddr, &SenderAddrSize);
} else
{
if(format == 0 && !len)
{
unsigned short length;
if(recv(sockid, (char*)&length, 2, 0) == SOCKET_ERROR)return -1;
buff = new char[length];
size = recv(sockid, buff, length, 0);
} else if(format == 1 && !len)
{
size = 65536;
buff = new char[size];
size = receivetext(buff, size);
} else if(format == 2 || len > 0)
{
buff = new char[len];
size = recv(sockid, buff, len, 0);
}
}
if(size > 0)
{
destination->clear();
destination->addBuffer(buff, size);
}
if(buff != NULL)delete buff;
return size;
}

Но я имею в виду, что такие переменные, как udp и format все готовы …
Это объект CSocket, который может быть поврежден?
Я имею в виду, почему это происходит только после многократного обновления страницы PHP?
Что делает его таким коррумпированным?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector