сокеты: heap corruption после recvfrom
От: _AND Российская Империя За Русский мир! За Русь святую!
Дата: 28.01.11 12:56
Оценка:
Помогите пожалуйста, уже не знаю в сторону чего копать.

При выполнении кода (см. ниже) при вызове closesocket выдается сообщение:
HEAP[example.exe]: Invalid Address specified to RtlFreeHeap( 082A0000, 082AE6A4 )

Приложение mfc dialog based, студия 2008


Если закомментарить вызов recvfrom, то все работает нормально.
В релизной конфигурации работает нормально, но если вызывать нескольо раз этот код, то виснет на последнем closesocket

Код:
//------------------------------------------------------------
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sock != INVALID_SOCKET) {
sockaddr_in addr, fromAddr;
ZeroMemory(&addr, sizeof(addr));
ZeroMemory(&fromAddr, sizeof(fromAddr));

addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(ipAddress);
addr.sin_port = htons(0x89);

const BYTE buf[] = {0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x4b, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x21, 0x00, 0x01};

int value = 500;
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*) &value, sizeof(int));

if(sendto(sock, (char*)buf, sizeof(buf), 0, (SOCKADDR*)&addr, sizeof(addr)) != SOCKET_ERROR) {
int size = sizeof(fromAddr);

BYTE * recvbuf = new BYTE[1024];
ZeroMemory(recvbuf, 1024);

if(recvfrom(sock, (char*)recvbuf, 1024, 0, (SOCKADDR*)&fromAddr, &size) != SOCKET_ERROR &&
fromAddr.sin_addr.S_un.S_addr == addr.sin_addr.S_un.S_addr) {

}

shutdown(sock, SD_BOTH);
delete[] recvbuf;
}
closesocket(sock);
}
//------------------------------------------------------------
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.