147 setsockopt(m_socketFileDescriptor, SOL_SOCKET, SO_REUSEADDR, (
const void *)&optval,
sizeof(
int));
150 setsockopt(m_socketFileDescriptor, SOL_SOCKET, SO_REUSEADDR, (
const char *)&optval,
sizeof(
int));
172 DWORD dwRetval = getaddrinfo(hostname.c_str(), ss.str().c_str(), &hints, &result);
190 if (bind(m_socketFileDescriptor, (
struct sockaddr *)&m_serverAddress,
sizeof(m_serverAddress)) < 0)
229 FD_SET(m_socketFileDescriptor, &s);
230 struct timeval timeout;
232 timeout.tv_sec = timeoutMs / 1000;
233 timeout.tv_usec = (timeoutMs % 1000) * 1000;
235 int retval = select(
static_cast<int>(m_socketFileDescriptor) + 1, &s,
nullptr,
nullptr, timeoutMs > 0 ? &timeout :
nullptr);
238 std::cerr <<
"Error select!" << std::endl;
244#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
245 int length =
static_cast<int>(recvfrom(m_socketFileDescriptor, m_buf,
sizeof(m_buf), 0,
246 (
struct sockaddr *)&m_clientAddress, (socklen_t *)&m_clientLength));
249 recvfrom(m_socketFileDescriptor, m_buf,
sizeof(m_buf), 0, (
struct sockaddr *)&m_clientAddress, &m_clientLength);
252 return length < 0 ? -1 : 0;
255 msg = std::string(m_buf, length);
258 char hostname[NI_MAXHOST];
259 char servInfo[NI_MAXSERV];
260 DWORD dwRetval = getnameinfo((
struct sockaddr *)&m_clientAddress,
sizeof(
struct sockaddr), hostname, NI_MAXHOST,
261 servInfo, NI_MAXSERV, NI_NUMERICSERV);
263 std::string hostName =
"", hostIp =
"", hostPort =
"";
265 std::cerr <<
"getnameinfo failed with error: " << WSAGetLastError() << std::endl;
272 char result[INET_ADDRSTRLEN];
273 const char *ptr = inet_ntop(AF_INET, (
void *)&m_clientAddress.sin_addr, result,
sizeof(result));
274 if (ptr ==
nullptr) {
275 std::cerr <<
"inet_ntop failed with error: " << WSAGetLastError() << std::endl;
281 std::stringstream ss;
282 ss << hostName <<
" " << hostIp <<
" " << hostPort;
304 if (msg.size() > VP_MAX_UDP_PAYLOAD) {
305 std::cerr <<
"Message is too long!" << std::endl;
310 memset(&m_clientAddress, 0,
sizeof(m_clientAddress));
311 std::stringstream ss;
313 struct addrinfo hints;
314 struct addrinfo *result =
nullptr;
315 struct addrinfo *ptr =
nullptr;
317 memset(&hints, 0,
sizeof(hints));
318 hints.ai_family = AF_INET;
319 hints.ai_socktype = SOCK_DGRAM;
320 hints.ai_protocol = IPPROTO_UDP;
322 DWORD dwRetval = getaddrinfo(hostname.c_str(), ss.str().c_str(), &hints, &result);
325 ss <<
"getaddrinfo failed with error: " << dwRetval;
329 for (ptr = result; ptr !=
nullptr; ptr = ptr->ai_next) {
330 if (ptr->ai_family == AF_INET && ptr->ai_socktype == SOCK_DGRAM) {
331 m_clientAddress = *(
struct sockaddr_in *)ptr->ai_addr;
336 freeaddrinfo(result);
339#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
340 return static_cast<int>(
341 sendto(m_socketFileDescriptor, msg.c_str(), msg.size(), 0, (
struct sockaddr *)&m_clientAddress, m_clientLength));
343 return sendto(m_socketFileDescriptor, msg.c_str(),
static_cast<int>(msg.size()), 0, (
struct sockaddr *)&m_clientAddress,