summaryrefslogtreecommitdiffstats
path: root/avahi-core/netlink.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-06-03 20:27:00 +0000
committerLennart Poettering <lennart@poettering.net>2005-06-03 20:27:00 +0000
commitb6820898d317c29a31f97018ede6da5195d16bfb (patch)
tree0193a8086c95c03abc6d176e62bb903e473247e0 /avahi-core/netlink.c
parent3184280a20d54b8f468d0b8d6ff0980b74610ec5 (diff)
* use FIONREAD to minimize allocated buffer size when reading incoming packets
* enforce a cache size limit git-svn-id: file:///home/lennart/svn/public/avahi/trunk@96 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-core/netlink.c')
-rw-r--r--avahi-core/netlink.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/avahi-core/netlink.c b/avahi-core/netlink.c
index e3cc3fa..88979e1 100644
--- a/avahi-core/netlink.c
+++ b/avahi-core/netlink.c
@@ -26,6 +26,7 @@
#include <unistd.h>
#include <errno.h>
#include <string.h>
+#include <sys/ioctl.h>
#include "netlink.h"
@@ -43,16 +44,18 @@ gboolean avahi_netlink_work(AvahiNetlink *nl, gboolean block) {
g_assert(nl);
for (;;) {
- guint8 replybuf[64*1024];
ssize_t bytes;
- struct nlmsghdr *p = (struct nlmsghdr *) replybuf;
+ struct nlmsghdr *p;
+ guint8 buffer[64*1024];
- if ((bytes = recv(nl->fd, replybuf, sizeof(replybuf), block ? 0 : MSG_DONTWAIT)) < 0) {
+ p = (struct nlmsghdr *) buffer;
+
+ if ((bytes = recv(nl->fd, buffer, sizeof(buffer), block ? 0 : MSG_DONTWAIT)) < 0) {
if (errno == EAGAIN || errno == EINTR)
break;
- g_warning("NETLINK: recv() failed");
+ g_warning("NETLINK: recv() failed: %s", strerror(errno));
return FALSE;
}
@@ -160,7 +163,7 @@ AvahiNetlink *avahi_netlink_new(GMainContext *context, gint priority, guint32 gr
void avahi_netlink_free(AvahiNetlink *nl) {
g_assert(nl);
-
+
g_source_destroy(nl->source);
g_source_unref(nl->source);
g_main_context_unref(nl->context);