diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 9ba266d..e307828 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -64,16 +64,11 @@ static bool m_reload = false; extern CMQTTConnection* m_mqtt; #if !defined(_WIN32) && !defined(_WIN64) -static void sigHandler1(int signum) +static void sigHandler(int signum) { m_killed = true; m_signal = signum; } - -static void sigHandler2(int signum) -{ - m_reload = true; -} #endif static CMMDVMHost* host = NULL; @@ -102,16 +97,16 @@ int main(int argc, char** argv) } #if !defined(_WIN32) && !defined(_WIN64) - ::signal(SIGINT, sigHandler1); - ::signal(SIGTERM, sigHandler1); - ::signal(SIGHUP, sigHandler1); - ::signal(SIGUSR1, sigHandler2); + ::signal(SIGINT, sigHandler); + ::signal(SIGTERM, sigHandler); + ::signal(SIGHUP, sigHandler); #endif int ret = 0; do { m_signal = 0; + m_killed = false; host = new CMMDVMHost(std::string(iniFile)); ret = host->run(); @@ -120,6 +115,8 @@ int main(int argc, char** argv) host = NULL; switch (m_signal) { + case 0: + break; case 2: ::LogInfo("MMDVMHost-%s exited on receipt of SIGINT", VERSION); break; @@ -127,16 +124,14 @@ int main(int argc, char** argv) ::LogInfo("MMDVMHost-%s exited on receipt of SIGTERM", VERSION); break; case 1: - ::LogInfo("MMDVMHost-%s exited on receipt of SIGHUP", VERSION); - break; - case 10: - ::LogInfo("MMDVMHost-%s is restarting on receipt of SIGUSR1", VERSION); + ::LogInfo("MMDVMHost-%s is restarting on receipt of SIGHUP", VERSION); + m_reload = true; break; default: ::LogInfo("MMDVMHost-%s exited on receipt of an unknown signal", VERSION); break; } - } while (m_signal == 10); + } while (m_reload || (m_signal == 1)); ::LogFinalise(); diff --git a/RemoteControl.cpp b/RemoteControl.cpp index 3ce9dcb..87c31a5 100644 --- a/RemoteControl.cpp +++ b/RemoteControl.cpp @@ -256,16 +256,16 @@ unsigned int CRemoteControl::getArgCount() const #if defined(USE_M17) case RCD_MODE_M17: #endif - return m_args.size() - SET_MODE_ARGS; + return (unsigned int)m_args.size() - SET_MODE_ARGS; #if defined(USE_POCSAG) case RCD_PAGE: case RCD_PAGE_BCD: case RCD_PAGE_A1: case RCD_PAGE_A2: - return m_args.size() - 1U; + return (unsigned int)m_args.size() - 1U; #endif case RCD_CW: - return m_args.size() - 1U; + return (unsigned int)m_args.size() - 1U; default: return 0U; } diff --git a/UDPSocket.cpp b/UDPSocket.cpp index 49fab17..7bb258e 100644 --- a/UDPSocket.cpp +++ b/UDPSocket.cpp @@ -30,7 +30,11 @@ CUDPSocket::CUDPSocket(const std::string& address, unsigned short port) : m_localAddress(address), m_localPort(port), +#if defined(_WIN32) || defined(_WIN64) +m_fd(INVALID_SOCKET), +#else m_fd(-1), +#endif m_af(AF_UNSPEC) { } @@ -38,7 +42,11 @@ m_af(AF_UNSPEC) CUDPSocket::CUDPSocket(unsigned short port) : m_localAddress(), m_localPort(port), +#if defined(_WIN32) || defined(_WIN64) +m_fd(INVALID_SOCKET), +#else m_fd(-1), +#endif m_af(AF_UNSPEC) { } @@ -91,7 +99,9 @@ int CUDPSocket::lookup(const std::string& hostname, unsigned short port, sockadd return err; } - ::memcpy(&addr, res->ai_addr, address_length = res->ai_addrlen); + address_length = (unsigned int)res->ai_addrlen; + + ::memcpy(&addr, res->ai_addr, address_length); ::freeaddrinfo(res); @@ -154,7 +164,11 @@ bool CUDPSocket::open(const sockaddr_storage& address) bool CUDPSocket::open() { +#if defined(_WIN32) || defined(_WIN64) + assert(m_fd == INVALID_SOCKET); +#else assert(m_fd == -1); +#endif sockaddr_storage addr; unsigned int addrlen; @@ -215,7 +229,14 @@ int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storag { assert(buffer != NULL); assert(length > 0U); - assert(m_fd >= 0); + +#if defined(_WIN32) || defined(_WIN64) + if (m_fd == INVALID_SOCKET) + return 0; +#else + if (m_fd == -1) + return 0; +#endif // Check that the readfrom() won't block struct pollfd pfd; @@ -276,7 +297,11 @@ bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const s { assert(buffer != NULL); assert(length > 0U); +#if defined(_WIN32) || defined(_WIN64) + assert(m_fd != INVALID_SOCKET); +#else assert(m_fd >= 0); +#endif bool result = false; @@ -307,13 +332,16 @@ bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const s void CUDPSocket::close() { - if (m_fd >= 0) { #if defined(_WIN32) || defined(_WIN64) + if (m_fd != INVALID_SOCKET) { ::closesocket(m_fd); + m_fd = INVALID_SOCKET; + } #else + if (m_fd >= 0) { ::close(m_fd); -#endif m_fd = -1; } +#endif }