return buflen;
}
+/**
+ * Set the configured receive buffer size on the given socket.
+ */
+static void set_rcvbuf_size(int socket)
+{
+ int rcvbuf_size = 0;
+
+ rcvbuf_size = lib->settings->get_int(lib->settings,
+ "%s.plugins.kernel-netlink.receive_buffer_size",
+ NETLINK_RCVBUF_DEFAULT, lib->ns);
+ if (rcvbuf_size)
+ {
+ if (setsockopt(socket, SOL_SOCKET, SO_RCVBUFFORCE, &rcvbuf_size,
+ sizeof(rcvbuf_size)) == -1 &&
+ setsockopt(socket, SOL_SOCKET, SO_RCVBUF, &rcvbuf_size,
+ sizeof(rcvbuf_size)) == -1)
+ {
+ DBG1(DBG_KNL, "failed to set receive buffer size to %d: %s",
+ rcvbuf_size, strerror(errno));
+ }
+ }
+}
+
/*
* Described in header
*/
struct sockaddr_nl addr = {
.nl_family = AF_NETLINK,
};
- int on = 1, rcvbuf_size = 0;
+ int on = 1;
INIT(this,
.public = {
ignore_result(setsockopt(this->socket, SOL_NETLINK, NETLINK_EXT_ACK, &on,
sizeof(on)));
- rcvbuf_size = lib->settings->get_int(lib->settings,
- "%s.plugins.kernel-netlink.receive_buffer_size",
- NETLINK_RCVBUF_DEFAULT, lib->ns);
- if (rcvbuf_size)
- {
- if (setsockopt(this->socket, SOL_SOCKET, SO_RCVBUFFORCE, &rcvbuf_size,
- sizeof(rcvbuf_size)) == -1 &&
- setsockopt(this->socket, SOL_SOCKET, SO_RCVBUF, &rcvbuf_size,
- sizeof(rcvbuf_size)) == -1)
- {
- DBG1(DBG_KNL, "failed to set receive buffer size to %d: %s",
- rcvbuf_size, strerror(errno));
- }
- }
+ set_rcvbuf_size(this->socket);
+
if (this->parallel)
{
lib->watcher->add(lib->watcher, this->socket, WATCHER_READ, watch, this);
return NULL;
}
+ set_rcvbuf_size(this->socket);
+
if (bind(this->socket, (struct sockaddr*)&addr, sizeof(addr)))
{
DBG1(DBG_KNL, "unable to bind netlink event socket: %s (%d)",