2014-07-18 29 views
2

最近,我正在學習iw的源代碼,試圖瞭解libnl如何工作。nl_socket_set_cb()在libnl中的用途

我遇到使用nl_socket_set_cb()的原因,我無法理解的iw.c一些點。網絡上也沒有文檔。

我的第一個疑問是在有數據要從nl套接字讀取時關聯回調函數,但這是在源代碼的其他部分通過調用nl_recvmsgs()時關聯回調來完成的。

任何人都可以點亮一下嗎? nl_socket_set_cb()是多餘的?

回答

0

絕對不知道!

我沒有在5月份的情況下(NL80211_ATTR_WIPHY_RTS_THRESHOLD配置)

它仍然運轉完好

或許真的與「nla_put_failure」符號

1

如果使用nl_recvmsgs(sk, cb),你仍然需要使用它如果您計劃使用NL_CB_MSG_OUT回調,請使用nl_socket_set_cb(sk, cb)。在通過套接字發送任何東西之前,該回調在nl_sendmsg()中調用。

但是,如果您改爲使用nl_recvmsgs_default(sk),那麼nl_socket_set_cb()便於使用,因爲它在sk->s_cb結構中存儲了回調,該結構傳遞給發送和接收函數。

我認爲nl_socket_set_sb()的真實用途是將nl_recvmsgs_default()與相同的套接字重新使用,因爲它看起來會刪除存儲在sk結構中的任何先前設置的回調。

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