From 177f87f0db4a0152270b00265b37465c17949c94 Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Mon, 30 Jul 2007 10:16:15 -0400 Subject: [PATCH] * improved nl_open() to bind a sockaddr_nl to the socket --- netlink.c | 18 ++++++++++++++---- netlink.h | 6 +++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/netlink.c b/netlink.c index 529b27b..a8296a0 100644 --- a/netlink.c +++ b/netlink.c @@ -11,15 +11,25 @@ #include "netlink.h" -#include // socket() #include // close() - -#include // NETLINK_ROUTE +#include // perror() int nl_open( link_t *self ) { // initialize memset(self, 0x00, sizeof(self)); - self->fd = socket( AF_NETLINK, SOCK_RAW, NETLINK_ROUTE ); + + // open the socket + if ( (self->fd = socket( AF_NETLINK, SOCK_RAW, NETLINK_ROUTE )) < 0 ) { + perror("socket"); + return -1; + } + + // bind it to the address + self->sa.nl_family = AF_NETLINK; + if ( bind( self->fd, (const struct sockaddr*) &self->sa, sizeof( self->sa ) ) < 0 ) { + perror("bind"); + close( self->fd ); + } return self->fd; } diff --git a/netlink.h b/netlink.h index 1fe82cf..fc1ef05 100644 --- a/netlink.h +++ b/netlink.h @@ -13,8 +13,12 @@ #ifndef __NETLINK_H__ #define __NETLINK_H__ +#include // socket() +#include // struct sockaddr_nl + typedef struct { - int fd; + int fd; + struct sockaddr_nl sa; } link_t; int nl_open( link_t *self ); -- 2.11.4.GIT