最近,我正在研究iw
的源代码,试图了解libnl
的工作原理。
由于我无法理解的原因,我在nl_socket_set_cb()
的某个时刻遇到过使用iw.c
。网上也没有文档。
当有数据要从nl套接字读取时,我的第一个怀疑是关联一个回调函数,但这是通过在调用nl_recvmsgs()
时关联一个回调在源代码的其他部分完成的。
任何人都能解开一些光明吗? nl_socket_set_cb()
是多余的吗?
答案 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
答案 1 :(得分:0)
绝对不知道!
我不会在可能的情况下使用它(NL80211_ATTR_WIPHY_RTS_THRESHOLD配置)
它仍然完美无缺
可能与" nla_put_failure"相关符号