polybar/include/utils/socket.hpp

48 lines
1.1 KiB
C++
Raw Normal View History

2016-06-15 03:32:35 +00:00
#pragma once
#include <poll.h>
2016-06-15 03:32:35 +00:00
#include "common.hpp"
2016-11-19 05:22:44 +00:00
POLYBAR_NS
2016-06-15 03:32:35 +00:00
namespace socket_util {
class unix_connection {
public:
2016-11-02 19:22:45 +00:00
explicit unix_connection(string&& path);
2016-06-15 03:32:35 +00:00
2016-11-02 19:22:45 +00:00
~unix_connection() noexcept;
2016-06-15 03:32:35 +00:00
2016-11-02 19:22:45 +00:00
int disconnect();
2016-06-15 03:32:35 +00:00
2016-11-02 19:22:45 +00:00
ssize_t send(const void* data, size_t len, int flags = 0);
2016-11-25 12:55:15 +00:00
ssize_t send(const string& data, int flags = 0);
2016-06-15 03:32:35 +00:00
2016-12-14 06:45:29 +00:00
string receive(const ssize_t receive_bytes, int flags = 0);
2016-12-14 06:13:07 +00:00
string receive(const ssize_t receive_bytes, ssize_t* bytes_received, int flags = 0);
bool peek(const size_t peek_bytes);
2016-11-02 19:22:45 +00:00
bool poll(short int events = POLLIN, int timeout_ms = -1);
2016-06-15 03:32:35 +00:00
protected:
int m_fd = -1;
string m_socketpath;
};
/**
* Creates a wrapper for a unix socket connection
*
* Example usage:
* \code cpp
2016-06-15 03:32:35 +00:00
* auto conn = socket_util::make_unix_connection("/tmp/socket");
* conn->send(...);
* conn->receive(...);
* \endcode
2016-06-15 03:32:35 +00:00
*/
2020-05-14 20:13:43 +00:00
inline unique_ptr<unix_connection> make_unix_connection(string&& path) {
return std::make_unique<unix_connection>(forward<string>(path));
2020-05-14 20:13:43 +00:00
}
} // namespace socket_util
2016-06-15 03:32:35 +00:00
2016-11-19 05:22:44 +00:00
POLYBAR_NS_END