Commit ccd2a3ed authored by Jan Moskyto Matejka's avatar Jan Moskyto Matejka
Browse files

Kernel socket missing err_hook fix

Thanks to Tim Weippert for bugreport.
parent 79e2293a
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -911,6 +911,12 @@ krt_sock_hook(sock *sk, int size UNUSED)
  return 0;
}

static void
krt_sock_err_hook(sock *sk, int e UNUSED)
{
  krt_sock_hook(sk, 0);
}

static sock *
krt_sock_open(pool *pool, void *data, int table_id)
{
@@ -932,6 +938,7 @@ krt_sock_open(pool *pool, void *data, int table_id)
  sk = sk_new(pool);
  sk->type = SK_MAGIC;
  sk->rx_hook = krt_sock_hook;
  sk->err_hook = krt_sock_err_hook;
  sk->fd = fd;
  sk->data = data;

+7 −0
Original line number Diff line number Diff line
@@ -1525,6 +1525,12 @@ nl_async_hook(sock *sk, int size UNUSED)
  return 1;
}

static void
nl_async_err_hook(sock *sk, int e UNUSED)
{
  nl_async_hook(sk, 0);
}

static void
nl_open_async(void)
{
@@ -1563,6 +1569,7 @@ nl_open_async(void)
  sk = nl_async_sk = sk_new(krt_pool);
  sk->type = SK_MAGIC;
  sk->rx_hook = nl_async_hook;
  sk->err_hook = nl_async_err_hook;
  sk->fd = fd;
  if (sk_open(sk) < 0)
    bug("Netlink: sk_open failed");
+1 −1
Original line number Diff line number Diff line
@@ -1857,7 +1857,7 @@ void
sk_err(sock *s, int revents)
{
  int se = 0, sse = sizeof(se);
  if (revents & POLLERR)
  if ((s->type != SK_MAGIC) && (revents & POLLERR))
    if (getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &se, &sse) < 0)
    {
      log(L_ERR "IO: Socket error: SO_ERROR: %m");