libnl中nl_socket_set_cb()的用途

时间:2014-07-18 02:02:09

标签: c linux

最近,我正在研究iw的源代码,试图了解libnl的工作原理。

由于我无法理解的原因,我在nl_socket_set_cb()的某个时刻遇到过使用iw.c。网上也没有文档。

当有数据要从nl套接字读取时,我的第一个怀疑是关联一个回调函数,但这是通过在调用nl_recvmsgs()时关联一个回调在源代码的其他部分完成的。

任何人都能解开一些光明吗? nl_socket_set_cb()是多余的吗?

2 个答案:

答案 0 :(得分:1)

如果您使用nl_recvmsgs(sk, cb),如果您打算使用nl_socket_set_cb(sk, cb)回调,仍需要使用NL_CB_MSG_OUT。在通过套接字发送任何内容之前,在nl_sendmsg()中调用该回调。

但是,如果您改为使用nl_recvmsgs_default(sk),那么nl_socket_set_cb()便可用,因为它会在sk->s_cb结构中存储回调,并将其传递给发送和接收函数。

我认为nl_socket_set_sb()的真正用途是使用相同的套接字重用nl_recvmsgs_default(),因为它似乎删除了存储在sk结构中的任何先前设置的回调。 / p>

https://github.com/thom311/libnl/blob/master/lib/nl.c

https://github.com/thom311/libnl/blob/master/lib/socket.c

https://github.com/thom311/libnl/blob/master/include/netlink-private/types.h

https://github.com/thom311/libnl/blob/master/lib/handlers.c

答案 1 :(得分:0)

绝对不知道!

我不会在可能的情况下使用它(NL80211_ATTR_WIPHY_RTS_THRESHOLD配置)

它仍然完美无缺

可能与" nla_put_failure"相关符号