#include <memory>
#include "sensor_log.h"
+#include "channel_event_handler.h"
+
+#define SYSTEMD_SOCK_BUF_SIZE 40000
using namespace ipc;
if (condition & (EVENT_OUT | EVENT_HUP))
return false;
- if (!m_ch->read_sync(msg))
+ if (!m_ch->read_sync(msg, false))
return false;
return false;
m_handler->connected(this);
}
+void channel::bind(void)
+{
+ ret_if(!m_loop);
+ m_event_id = m_loop->add_event(m_socket->get_fd(),
+ (EVENT_IN | EVENT_HUP | EVENT_NVAL),
+ dynamic_cast<channel_event_handler *>(m_handler));
+}
+
bool channel::connect(channel_handler *handler, event_loop *loop)
{
if (!m_socket->connect())
/* TODO: check buffer size(is there any linux api for this?) */
int cur_buffer_size = m_socket->get_current_buffer_size();
- retvm_if(!cur_buffer_size > 40000, false, "Failed to send data");
+ retvm_if(cur_buffer_size > SYSTEMD_SOCK_BUF_SIZE, false, "Failed to send data");
send_event_handler *handler = new(std::nothrow) send_event_handler(this, msg);
retvm_if(!handler, false, "Failed to allocate memory");
return true;
}
-bool channel::read_sync(message &msg)
+bool channel::read_sync(message &msg, bool select)
{
message_header header;
ssize_t size = 0;
char buf[MAX_MSG_CAPACITY];
/* header */
- size = m_socket->recv(&header, sizeof(message_header), true);
+ size = m_socket->recv(&header, sizeof(message_header), select);
retv_if(size <= 0, false);
/* check error from header */
/* body */
if (header.length > 0) {
- size = m_socket->recv(&buf, header.length, true);
+ size = m_socket->recv(&buf, header.length, select);
retv_if(size <= 0, false);
}