37 long timeoutSeconds = 5L;
43 iResult = ::WSAStartup(MAKEWORD(2, 2), &wsaData);
44 if (iResult != NO_ERROR)
52 m_socket = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
62 long timeoutMs = timeoutSeconds * 1000L;
64 setsockopt(
m_socket, SOL_SOCKET, SO_RCVTIMEO, (
const char*)&timeoutMs,
sizeof(timeoutMs));
67 tv.tv_sec = timeoutSeconds;
69 iResult = setsockopt(
m_socket, SOL_SOCKET, SO_RCVTIMEO, (
const char*)&tv,
sizeof(
struct timeval));
89 m_udpAddr.sin_addr.s_addr = inet_addr(hostname.c_str());
91 setsockopt(
m_socket, SOL_SOCKET, SO_BROADCAST, (
const char*)&trueVal,
sizeof(trueVal));
106 int bufferSize = 512 * 1024;
107 int bufferSizeLen =
sizeof(bufferSize);
108 iResult = setsockopt(
m_socket, SOL_SOCKET, SO_RCVBUF, (
char*)&bufferSize, bufferSizeLen);
115 saddr.sin_family = AF_INET;
116 saddr.sin_addr.s_addr = htonl(INADDR_ANY);
117 saddr.sin_port = port;
118 iResult = bind(
m_socket,
reinterpret_cast<sockaddr*
>(&saddr),
sizeof(saddr));
141 reinterpret_cast<const char*
>(buffer.data()),
142 static_cast<int>(buffer.size()),
151 buffer.resize(maxBytesToReceive);
152 char* pBuffer =
reinterpret_cast<char*
>(buffer.data());
154 return ::recv(
m_socket, pBuffer,
static_cast<int>(maxBytesToReceive), 0);
160 buffer.resize(nBytesToReceive);
161 char* pBuffer =
reinterpret_cast<char*
>(buffer.data());
163 int bytesReceived = 0;
164 while (nBytesToReceive > 0)
166 bytesReceived =
::recv(
m_socket, pBuffer,
static_cast<int>(nBytesToReceive), 0);
168 if (bytesReceived ==
SOCKET_ERROR || bytesReceived == 0)
172 pBuffer += bytesReceived;
173 nBytesToReceive -= bytesReceived;
176 return bytesReceived;