Ошибка 10013 Winsock при попытке создать широковещательный сокет
Есть примитивная программа, которая должна одно сообщение постоянно спамить в эфир:
int main() {
setlocale(LC_ALL,"rus");
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cerr << "Ошибка инициализации сокетов: " << WSAGetLastError() << std::endl;
return 1;
}
// создание UDP сокета
SOCKET udpSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (udpSocket == INVALID_SOCKET) {
std::cerr << "Ошибка создания сокета: " << WSAGetLastError() << std::endl;
WSACleanup();
return 1;
}
// адрес и порт назначения
sockaddr_in destAddr;
destAddr.sin_family = AF_INET;
destAddr.sin_port = htons(8564);
destAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
int i = 0;
// бесконечный цикл отправки сообщения
while (true) {
i++;
const char* message = "Test message № ";
char buffer[1024];
LPSTR errorMessage = NULL;
int messageLength = std::strlen(buffer);
std::sprintf(buffer, "%s%d", message, i);
if (sendto(udpSocket,buffer, messageLength, 0, (sockaddr*)&destAddr, sizeof(destAddr)) == SOCKET_ERROR) {
DWORD errorCode = WSAGetLastError();
FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, errorCode, 0, (LPSTR)&errorMessage, 0, NULL);
std::cout << "Error: " << errorMessage << std::endl;
closesocket(udpSocket);
WSACleanup();
return 1;
}
std::cout << buffer<<std::endl;
Sleep(1000); // пауза в 1 секунду
}
closesocket(udpSocket);
WSACleanup();
return 0;
}
Пробовал другие порты указывать, отключил брандмауэр, среда от админа запущена. Что ему не нравится?
Источник: Stack Overflow на русском