Add nl_send_sync()

Function which sends message using nl_send_auto(), frees the message and
waits for ACK/error message (if auto-ack is not disabled).
This commit is contained in:
Thomas Graf 2011-03-25 18:11:52 +01:00
parent 7e9d5f69e5
commit 23845e942c
2 changed files with 32 additions and 0 deletions

View file

@ -59,6 +59,7 @@ extern void nl_auto_complete(struct nl_sock *,
extern int nl_send_auto(struct nl_sock *, struct nl_msg *);
extern int nl_send_auto_complete(struct nl_sock *,
struct nl_msg *);
extern int nl_send_sync(struct nl_sock *, struct nl_msg *);
extern int nl_send_simple(struct nl_sock *, int, int,
void *, size_t);

View file

@ -345,6 +345,37 @@ int nl_send_auto_complete(struct nl_sock *sk, struct nl_msg *msg)
return nl_send_auto(sk, msg);
}
/**
* Send netlink message and wait for response (sync request-response)
* @arg sk Netlink socket
* @arg msg Netlink message to be sent
*
* This function takes a netlink message and sends it using nl_send_auto().
* It will then wait for the response (ACK or error message) to be
* received. Threfore this function will block until the operation has
* been completed.
*
* @note Disabling auto-ack (nl_socket_disable_auto_ack()) will cause
* this function to return immediately after sending. In this case,
* it is the responsibility of the caller to handle any eventual
* error messages returned.
*
* @see nl_send_auto().
*
* @return 0 on success or a negative error code.
*/
int nl_send_sync(struct nl_sock *sk, struct nl_msg *msg)
{
int err;
err = nl_send_auto(sk, msg);
nlmsg_free(msg);
if (err < 0)
return err;
return wait_for_ack(sk);
}
/**
* Send simple netlink message using nl_send_auto_complete()
* @arg sk Netlink socket.