enhanced TcpServer::setup_listeners() to ignore some whitespaces int the addresses.

added a new parameter to App::guardProcess() to let it not guard optionally
This commit is contained in:
hyung-hwan 2020-08-12 08:22:23 +00:00
parent 47a8cdeb11
commit b9a8722d3b
4 changed files with 37 additions and 3 deletions

View File

@ -438,6 +438,17 @@ public:
return this->_item->buffer[index]; return this->_item->buffer[index];
} }
const CHAR_TYPE& getLastChar () const
{
QSE_ASSERT (this->_item->size > 0);
return this->getCharAt(this->_item->size - 1);
}
const CHAR_TYPE& getFirstChar () const
{
return this->getCharAt(0);
}
void setCharAt (qse_size_t index, CHAR_TYPE c) void setCharAt (qse_size_t index, CHAR_TYPE c)
{ {
QSE_ASSERT (index < this->_item->size); QSE_ASSERT (index < this->_item->size);

View File

@ -159,7 +159,7 @@ public:
return this->_guarded_child_pid >= 0; return this->_guarded_child_pid >= 0;
} }
int guardProcess (const SignalSet& signals, qse_mtime_t guard_pause_ms = 0, const qse_mchar_t* proc_name = QSE_NULL); int guardProcess (const SignalSet& signals, bool _guard = true, qse_mtime_t guard_pause_ms = 0, const qse_mchar_t* proc_name = QSE_NULL);
// ============================================================= // =============================================================

View File

@ -23,6 +23,7 @@
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <stdio.h>
#include <qse/si/App.hpp> #include <qse/si/App.hpp>
#include <qse/si/Mutex.hpp> #include <qse/si/Mutex.hpp>
@ -502,7 +503,7 @@ int App::neglectSignals (const SignalSet& signals, bool ignore_if_unhandled)
return n; return n;
} }
int App::guardProcess (const SignalSet& signals, qse_mtime_t guard_pause_ms, const qse_mchar_t* proc_name) int App::guardProcess (const SignalSet& signals, bool _guard, qse_mtime_t guard_pause_ms, const qse_mchar_t* proc_name)
{ {
SignalState old_ss[QSE_NSIGS]; SignalState old_ss[QSE_NSIGS];
int seq = 0; int seq = 0;
@ -558,6 +559,7 @@ int App::guardProcess (const SignalSet& signals, qse_mtime_t guard_pause_ms, con
{ {
if (WEXITSTATUS(status) == 0) if (WEXITSTATUS(status) == 0)
{ {
exit_ok:
// the child has terminated normally and successfully. // the child has terminated normally and successfully.
for (int i = 0; i < QSE_NSIGS; i++) for (int i = 0; i < QSE_NSIGS; i++)
{ {
@ -576,6 +578,8 @@ int App::guardProcess (const SignalSet& signals, qse_mtime_t guard_pause_ms, con
::kill (-pid, SIGKILL); ::kill (-pid, SIGKILL);
} }
if (!_guard) goto exit_ok; // no guard;
if (guard_pause_ms > 0) qse_msleep (guard_pause_ms); if (guard_pause_ms > 0) qse_msleep (guard_pause_ms);
} }

View File

@ -27,6 +27,7 @@
#include <qse/si/TcpServer.hpp> #include <qse/si/TcpServer.hpp>
#include <qse/si/os.h> #include <qse/si/os.h>
#include <qse/cmn/str.h> #include <qse/cmn/str.h>
#include <qse/cmn/chr.h>
#include "../cmn/mem-prv.h" #include "../cmn/mem-prv.h"
#include <errno.h> #include <errno.h>
@ -259,6 +260,24 @@ void TcpServer::dispatch_mux_event (qse_mux_t* mux, const qse_mux_evt_t* evt) QS
} }
} }
static const qse_char_t* strip_enclosing_spaces (const qse_char_t* ptr, qse_size_t* len)
{
const qse_char_t* end = ptr + *len;
while (ptr < end)
{
if (!QSE_ISSPACE(*ptr)) break;
ptr++;
}
while (end > ptr)
{
if (!QSE_ISSPACE(end[-1])) break;
end--;
}
*len = end - ptr;
return ptr;
}
int TcpServer::setup_listeners (const qse_char_t* addrs) QSE_CPP_NOEXCEPT int TcpServer::setup_listeners (const qse_char_t* addrs) QSE_CPP_NOEXCEPT
{ {
const qse_char_t* addr_ptr, * comma; const qse_char_t* addr_ptr, * comma;
@ -321,8 +340,8 @@ int TcpServer::setup_listeners (const qse_char_t* addrs) QSE_CPP_NOEXCEPT
comma = qse_strchr(addr_ptr, QSE_T(',')); comma = qse_strchr(addr_ptr, QSE_T(','));
addr_len = comma? comma - addr_ptr: qse_strlen(addr_ptr); addr_len = comma? comma - addr_ptr: qse_strlen(addr_ptr);
/* [NOTE] no whitespaces are allowed before and after a comma */
addr_ptr = strip_enclosing_spaces(addr_ptr, &addr_len);
if (sockaddr.set(addr_ptr, addr_len) <= -1) if (sockaddr.set(addr_ptr, addr_len) <= -1)
{ {
this->logfmt (QSE_LOG_ERROR, QSE_T("unrecognized listener address - %.*js\n"), (int)addr_len, addr_ptr); this->logfmt (QSE_LOG_ERROR, QSE_T("unrecognized listener address - %.*js\n"), (int)addr_len, addr_ptr);