# Define the flags used in each set of tests.
AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
-AM_CPPFLAGS += -DTEMP_DIR=\"${build_dir}\"
+AM_CPPFLAGS += -DTEMP_DIR=\"$(top_builddir)\"
AM_CPPFLAGS += $(BOOST_INCLUDES) $(GTEST_INCLUDES) $(LOG4CPLUS_INCLUDES)
AM_CXXFLAGS = $(KEA_CXXFLAGS)
ADD_FAILURE() << "send command with closed socket";
return (false);
}
+ switch (selectCheck(3, false, true)) {
+ case -1: {
+ const char* errmsg = strerror(errno);
+ ADD_FAILURE() << "sendCommand - select failed: " << errmsg;
+ return (false);
+ }
+ case 0:
+ return (false);
+
+ default:
+ break;
+ }
// Send command
int bytes_sent = send(socket_fd_, command.c_str(), command.length(), 0);
if (bytes_sent < command.length()) {
// Receive response
char buf[65536];
memset(buf, 0, sizeof(buf));
- switch (selectCheck(timeout_sec)) {
+ switch (selectCheck(timeout_sec, true, false)) {
case -1: {
const char* errmsg = strerror(errno);
ADD_FAILURE() << "getResponse - select failed: " << errmsg;
return (true);
}
-int UnixControlClient::selectCheck(const unsigned int timeout_sec) {
+int UnixControlClient::selectCheck(const unsigned int timeout_sec,
+ bool read_check,
+ bool write_check) {
if (socket_fd_ < 0) {
ADD_FAILURE() << "select check with closed socket";
return -1;
fd_set read_fds;
FD_ZERO(&read_fds);
- // Add this socket to listening set
- FD_SET(socket_fd_, &read_fds);
+ fd_set write_fds;
+ FD_ZERO(&write_fds);
+
maxfd = socket_fd_;
+ // Add this socket to read set
+ FD_SET(socket_fd_, &read_fds);
+
+ // Add this socket to write set
+ FD_SET(socket_fd_, &write_fds);
+
struct timeval select_timeout;
select_timeout.tv_sec = static_cast<time_t>(timeout_sec);
select_timeout.tv_usec = 0;
- return (select(maxfd + 1, &read_fds, NULL, NULL, &select_timeout));
+ fd_set* read_p = 0;
+ fd_set* write_p = 0;
+
+ if (read_check) {
+ read_p = &read_fds;
+ }
+
+ if (write_check) {
+ write_p = &write_fds;
+ }
+
+ return (select(maxfd + 1, read_p, write_p, NULL, &select_timeout));
}
}
/// @brief Uses select to poll the Control Channel for data waiting
///
/// @param timeout_sec Select timeout in seconds
+ /// @param read_check flag to check socket for read ready state
+ /// @param write_check flag to check socket for write ready state
/// @return -1 on error, 0 if no data is available, 1 if data is ready
- int selectCheck(const unsigned int timeout_sec);
+ int selectCheck(const unsigned int timeout_sec, bool read_check, bool write_check);
/// @brief Retains the fd of the open socket
int socket_fd_;