From 48e47110397c894716525db219e53300c08f64dd Mon Sep 17 00:00:00 2001 From: jimi-wzq <wangzhengquan85@gmail.com> Date: 星期二, 12 一月 2021 15:27:34 +0800 Subject: [PATCH] doxygen --- src/socket/net_mod_socket_wrapper.h | 368 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 258 insertions(+), 110 deletions(-) diff --git a/src/socket/net_mod_socket_wrapper.h b/src/socket/net_mod_socket_wrapper.h index 80195fa..171a3a8 100644 --- a/src/socket/net_mod_socket_wrapper.h +++ b/src/socket/net_mod_socket_wrapper.h @@ -1,3 +1,13 @@ +/** + * @file + * + * @brief 鍙戝竷璁㈤槄鍜岃姹傚簲绛旂殑瀹㈡埛绔� + * + * @details 鍚態usService鍙戝竷娑堟伅鎴栬�呭湪BusService涓婅闃呮劅鍏磋叮鐨勬秷鎭� + */ + + + #ifndef __NET_MOD_SOCKET_H__ #define __NET_MOD_SOCKET_H__ @@ -7,173 +17,311 @@ extern "C" { #endif -struct net_mod_socket_t -{ - NetModSocket *sockt; -}; + -/************************************************ - * 鍒涘缓 net_mod_socket - ***********************************************/ +/** + * @brief 鍒涘缓 net_mod_socket + * @return net_mod_socket 鍙ユ焺 + */ void * net_mod_socket_open(); -/************************************************ - * 鍏抽棴 net_mod_socket - ***********************************************/ +/** + * @brief 鍏抽棴 net_mod_socket + */ void net_mod_socket_close(void *_sockt); -/************************************************ - * 缁戝畾绔彛鍒皊ocket, 濡傛灉涓嶇粦瀹氬垯绯荤粺鑷姩鍒嗛厤涓�涓� - * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 -***********************************************/ +/** + * @brief 缁戝畾绔彛鍒皊ocket, 濡傛灉涓嶇粦瀹氬垯绯荤粺鑷姩鍒嗛厤涓�涓� + * + * @param key 缁戝畾鐨刱ey鍊� + * @return 0鏄垚鍔燂紝鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_bind(void * _socket, int key); -/************************************************ - * 寮哄埗缁戝畾绔彛鍒皊ocket, 閫傜敤浜庣▼搴忛潪姝e父鍏抽棴鐨勬儏鍐典笅锛岄噸鍚▼搴忕粦瀹氬師鏉ヨ繕娌¢噴鏀剧殑key - * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 -***********************************************/ +/** + * @brief 寮哄埗缁戝畾绔彛鍒皊ocket, 閫傜敤浜庣▼搴忛潪姝e父鍏抽棴鐨勬儏鍐典笅锛岄噸鍚▼搴忕粦瀹氬師鏉ヨ繕娌¢噴鏀剧殑key + * + * @return 0鏄垚鍔燂紝 鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_force_bind(void * _socket, int key); -/************************************************ - * 鍙戦�佷俊鎭�,鍙戦�佸畬鎴愭墠杩斿洖 - * @key 鍙戦�佺粰璋� - * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 - ***********************************************/ +/** + * @brief 鍙戦�佷俊鎭�,鍙戦�佸畬鎴愭墠杩斿洖 + * + * @param buf 娑堟伅瀛樻斁鐨勭紦瀛樺湴鍧� + * @param size 娑堟伅闀垮害 + * @param param key 鍙戦�佺粰璋� + * + * @return 0鏄垚鍔燂紝 鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_sendto(void *_socket, const void *buf, const int size, const int key); -/************************************************ - * 鍙戦�佷俊鎭紝 瓒呮椂杩斿洖銆� @sec 绉� 锛� @nsec 绾崇 - ***********************************************/ + +/** + * @brief 鍙戦�佷俊鎭紝鍦ㄦ寚瀹氭椂闂村唴娌″彂閫佸畬鎴愪篃杩斿洖銆� + * + * @param buf 娑堟伅瀛樻斁鐨勭紦瀛樺湴鍧� + * @param size 娑堟伅闀垮害 + * @param param key 鍙戦�佺粰璋� + * @param sec 绉� + * @param nsec 绾崇 + * + * @return 0鏄垚鍔燂紝 鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_sendto_timeout(void *_socket, const void *buf, const int size, const int key, int sec, int nsec); -/************************************************ - * 鍙戦�佷俊鎭珛鍒昏繑鍥炪�� - ***********************************************/ + +/** + * @brief 鍙戦�佷俊鎭紝鏃犺鏄惁鍙戦�佸畬鎴愮珛鍒昏繑鍥炪�� + * + * @param buf 娑堟伅瀛樻斁鐨勭紦瀛樺湴鍧� + * @param size 娑堟伅闀垮害 + * @param param key 鍙戦�佺粰璋� + * + * @return 0鏄垚鍔燂紝 鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_sendto_nowait(void *_socket, const void *buf, const int size, const int key); -/************************************************ - * 鎺ユ敹淇℃伅 - * @key 浠庤皝鍝噷鏀跺埌鐨勪俊鎭� - * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 -***********************************************/ +/** + * @brief 绛夊緟鎺ユ敹淇℃伅锛岀洿鍒版湁娑堟伅鎺ュ彈鍒版墠杩斿洖 + * + * @param buf 鎺ュ彈鍒扮殑娑堟伅瀛樻斁鐨勭紦瀛樺湴鍧�锛岃buf浣跨敤瀹屾垚鍚庨渶瑕佹墜鍔ㄩ噴鏀� + * @param size 鎺ュ彈鍒版秷鎭殑闀垮害 + * @param key 浠庤皝鍝噷鏀跺埌鐨勪俊鎭� + * + * @return 0鏄垚鍔燂紝 鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_recvfrom(void *_socket, void **buf, int *size, int *key); -// 鎺ュ彈淇℃伅瓒呮椂杩斿洖銆� @sec 绉� 锛� @nsec 绾崇 +/** + * @brief 绛夊緟鎺ユ敹淇℃伅锛屽湪鎸囧畾鐨勬椂闂村唴鍗充娇娌℃湁鎺ュ彈鍒版秷鎭篃瑕佽繑鍥� + * + * @param buf 鎺ュ彈鍒扮殑娑堟伅瀛樻斁鐨勭紦瀛樺湴鍧�锛岃buf浣跨敤瀹屾垚鍚庨渶瑕佹墜鍔ㄩ噴鏀� + * @param size 鎺ュ彈鍒版秷鎭殑闀垮害 + * @param key 浠庤皝鍝噷鏀跺埌鐨勪俊鎭� + * @param sec 绉� + * @param nsec 绾崇 + * + * @return 0鏄垚鍔燂紝 鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_recvfrom_timeout(void *_socket, void **buf, int *size, int *key, int sec, int nsec); + +/** + * @brief 绛夊緟鎺ユ敹淇℃伅锛岀洿鍒版湁娑堟伅鎺ュ彈鍒版墠杩斿洖 + * + * @param buf 鎺ュ彈鍒扮殑娑堟伅瀛樻斁鐨勭紦瀛樺湴鍧�锛岃buf浣跨敤瀹屾垚鍚庨渶瑕佹墜鍔ㄩ噴鏀� + * @param size 鎺ュ彈鍒版秷鎭殑闀垮害 + * @param key 浠庤皝鍝噷鏀跺埌鐨勪俊鎭� + * + * @return 0鏄垚鍔燂紝鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_recvfrom_nowait(void *_socket, void **buf, int *size, int *key); -/************************************************ - * 濡傛灉寤虹珛杩炴帴鐨勮妭鐐规病鏈夋帴鍙楀埌娑堟伅浼氫竴鐩寸瓑寰� +/** + * @brief 璺ㄦ満鍣ㄥ彂閫佹秷鎭苟鎺ュ彈杩斿洖鐨勫簲绛旀秷鎭紝鐩村埌鍙戦�佸畬鎴愭墠杩斿洖 + * * 鍚憂ode_arr 涓殑鎵�鏈夌綉缁滆妭鐐瑰彂閫佽姹傛秷鎭紝鑺傜偣鐨勮繑鍥炰俊鎭眹鎬诲苟瀛樺偍鍦╮ecv_arr涓� - * @node_arr 缃戠粶鑺傜偣缁�, @node_arr_len璇ユ暟缁勯暱搴�.濡傛灉IP涓虹┖鍒欎负鏈湴鍙戦�併�� - * @send_buf 鍙戦�佺殑娑堟伅锛孈send_size 璇ユ秷鎭綋鐨勯暱搴� - * @recv_arr 杩斿洖鐨勫簲绛旀秷鎭粍锛孈recv_arr_size 璇ユ暟缁勯暱搴� + * @param node_arr 缃戠粶鑺傜偣缁�, + * @param node_arr_len璇ユ暟缁勯暱搴�.濡傛灉IP涓虹┖鍒欎负鏈湴鍙戦�併�� + * @param send_buf 鍙戦�佺殑娑堟伅 + * @param send_size 璇ユ秷鎭綋鐨勯暱搴� + * @param recv_arr 杩斿洖鐨勫簲绛旀秷鎭暟缁� + * @param recv_arr_size 杩斿洖鐨勫簲绛旀秷鎭暟缁勯暱搴� + * * @return 鎴愬姛鍙戦�佺殑鑺傜偣鐨勪釜鏁� - * 浼樼偣锛�1鏌愪釜鑺傜偣鐨勬晠闅滀笉浼氶樆濉炲叾浠栬妭鐐广��2 鎬ц兘濂姐�� 3 閲囩敤thread local鎶�鏈嵆淇濊瘉浜嗙嚎绋嬪畨鍏紝鍙堝彲浠ヤ娇鐢ㄨ繛鎺ユ睜缂撳瓨杩炴帴 - ***********************************************/ -int net_mod_socket_sendandrecv(void *_sockt, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, + * + */ +extern int net_mod_socket_sendandrecv(void *_sockt, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, net_mod_recv_msg_t ** recv_arr, int *recv_arr_size) ; -/************************************************ - * 濡傛灉寤虹珛杩炴帴鐨勮妭鐐规病鏈夋帴鍙楀埌娑堟伅绛夊緟timeout鐨勬椂闂村悗杩斿洖 - * @timeout 绛夊緟鏃堕棿锛屽崟浣嶆槸鍗冨垎涔嬩竴绉� - ***********************************************/ + + +/** + * @brief 璺ㄦ満鍣ㄥ彂閫佹秷鎭苟鎺ュ彈杩斿洖鐨勫簲绛旀秷鎭紝鍦ㄦ寚瀹氭椂闂村唴鍗充娇娌℃湁鍙戦�佸畬鎴愪篃杩斿洖 + * + * 鍚憂ode_arr 涓殑鎵�鏈夌綉缁滆妭鐐瑰彂閫佽姹傛秷鎭紝鑺傜偣鐨勮繑鍥炰俊鎭眹鎬诲苟瀛樺偍鍦╮ecv_arr涓� + * @param node_arr 缃戠粶鑺傜偣缁�, + * @param node_arr_len璇ユ暟缁勯暱搴�.濡傛灉IP涓虹┖鍒欎负鏈湴鍙戦�併�� + * @param send_buf 鍙戦�佺殑娑堟伅 + * @param send_size 璇ユ秷鎭綋鐨勯暱搴� + * @param recv_arr 杩斿洖鐨勫簲绛旀秷鎭暟缁� + * @param recv_arr_size 杩斿洖鐨勫簲绛旀秷鎭暟缁勯暱搴� + * @param timeout 绛夊緟鏃堕棿(璞锛屽嵆鍗冨垎涔嬩竴绉�) + * + * @return 鎴愬姛鍙戦�佺殑鑺傜偣鐨勪釜鏁� + * + */ int net_mod_socket_sendandrecv_timeout(void *_sockt, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, net_mod_recv_msg_t ** recv_arr, int *recv_arr_size, int timeout); -/************************************************ - * 涓嶇瓑寰呯珛鍗宠繑鍥� - ***********************************************/ + +/** + * @brief 璺ㄦ満鍣ㄥ彂閫佹秷鎭苟鎺ュ彈杩斿洖鐨勫簲绛旀秷鎭紝涓嶇鏄惁鍙戦�佸畬鎴愮珛鍒昏繑鍥� + * + * 鍚憂ode_arr 涓殑鎵�鏈夌綉缁滆妭鐐瑰彂閫佽姹傛秷鎭紝鑺傜偣鐨勮繑鍥炰俊鎭眹鎬诲苟瀛樺偍鍦╮ecv_arr涓� + * @param node_arr 缃戠粶鑺傜偣缁�, + * @param node_arr_len璇ユ暟缁勯暱搴�.濡傛灉IP涓虹┖鍒欎负鏈湴鍙戦�併�� + * @param send_buf 鍙戦�佺殑娑堟伅 + * @param send_size 璇ユ秷鎭綋鐨勯暱搴� + * @param recv_arr 杩斿洖鐨勫簲绛旀秷鎭暟缁� + * @param recv_arr_size 杩斿洖鐨勫簲绛旀秷鎭暟缁勯暱搴� + * + * @return 鎴愬姛鍙戦�佺殑鑺傜偣鐨勪釜鏁� + * + */ int net_mod_socket_sendandrecv_nowait(void *_sockt, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, net_mod_recv_msg_t ** recv_arr, int *recv_arr_size) ; - /************************************************ - * 鍚憂ode_arr 涓殑鎵�鏈夌綉缁滆妭鐐瑰彂甯冩秷鎭� - * @node_arr 缃戠粶鑺傜偣缁�, @node_arr_len璇ユ暟缁勯暱搴� - * @topic 涓婚锛孈topic_size 璇ヤ富棰樼殑闀垮害 - * @content 鍐呭锛孈content_size 鍐呭闀垮害 - * @return 鎴愬姛鍙戝竷鐨勮妭鐐圭殑涓暟 - ***********************************************/ + /** + * @brief 鍚憂ode_arr涓殑鎵�鏈夌綉缁滆妭鐐瑰彂甯冩秷鎭� + * + * @param node_arr 缃戠粶鑺傜偣缁�, @node_arr_len璇ユ暟缁勯暱搴� + * @param topic 涓婚锛� + * @param topic_size 璇ヤ富棰樼殑闀垮害 + * @param content 鍐呭锛� + * @param content_size 鍐呭闀垮害 + * + * @return 鎴愬姛鍙戝竷鐨勮妭鐐圭殑涓暟 + */ int net_mod_socket_pub(void *_sockt, net_node_t *node_arr, int node_arr_len, char *topic, int topic_size, void *content, int content_size); -/************************************************ - * 鍙戝竷娑堟伅瓒呮椂鍚庤繑鍥� - * @msec 姣锛堝崈鍒嗕箣涓�绉掞級 - ***********************************************/ + + +/** + * @brief 鍚憂ode_arr涓殑鎵�鏈夌綉缁滆妭鐐瑰彂甯冩秷鎭紝鍦ㄦ寚瀹氭椂闂村唴鍗充娇娌℃湁鍙戝竷瀹屾垚涔熻繑鍥� + * + * @param node_arr 缃戠粶鑺傜偣缁�, @node_arr_len璇ユ暟缁勯暱搴� + * @param topic 涓婚锛� + * @param topic_size 璇ヤ富棰樼殑闀垮害 + * @param content 鍐呭锛� + * @param content_size 鍐呭闀垮害 + * @param msec 瓒呮椂鏃堕棿锛堟绉掞紝鏃㈠崈鍒嗕箣涓�绉掞級 + * + * @return 鎴愬姛鍙戝竷鐨勮妭鐐圭殑涓暟 + */ int net_mod_socket_pub_timeout(void *_sockt, net_node_t *node_arr, int node_arr_len, char *topic, int topic_size, void *content, int content_size, int msec); -/************************************************ - * 鍙戝竷娑堟伅涓嶇鎴愬姛涓庡惁绔嬪埢杩斿洖 - * @msec 姣锛堝崈鍒嗕箣涓�绉掞級 - ***********************************************/ + + +/** + * @brief 鍚憂ode_arr涓殑鎵�鏈夌綉缁滆妭鐐瑰彂甯冩秷鎭紝涓嶇鏄惁鍙戝竷瀹屾垚绔嬪埢杩斿洖 + * + * @param node_arr 缃戠粶鑺傜偣缁�, @node_arr_len璇ユ暟缁勯暱搴� + * @param topic 涓婚锛� + * @param topic_size 璇ヤ富棰樼殑闀垮害 + * @param content 鍐呭锛� + * @param content_size 鍐呭闀垮害 + * + * @return 鎴愬姛鍙戝竷鐨勮妭鐐圭殑涓暟 + */ int net_mod_socket_pub_nowait(void *_sockt, net_node_t *node_arr, int node_arr_len, char *topic, int topic_size, void *content, int content_size); -/************************************************ - * 璁㈤槄鎸囧畾涓婚 - * @topic 涓婚 - * @size 涓婚闀垮害 - * @key 鎬荤嚎绔彛 - ***********************************************/ -int net_mod_socket_sub(void * _socket, void *topic, int size); -/************************************************ - * 璁㈤槄娑堟伅锛岃秴鏃惰繑鍥炪�� - * @sec 绉� 锛� @nsec 绾崇 - ***********************************************/ -int net_mod_socket_sub_timeout(void * _socket, void *topic, int size, int sec, int nsec); -/************************************************ - * 璁㈤槄娑堟伅锛屼笉绠℃垚鍔熶笌鍚︾珛鍒昏繑鍥炪�� +/** + * @brief 璁㈤槄鎰熷叴瓒d富棰樼殑娑堟伅 * - ***********************************************/ + * @param topic 涓婚 + * @param size 涓婚闀垮害 + * + * @return 0鏄垚鍔燂紝鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + * + */ +int net_mod_socket_sub(void * _socket, void *topic, int size); + +/** + * @brief 璁㈤槄鎰熷叴瓒d富棰樼殑娑堟伅, 鍦ㄦ寚瀹氱殑鏃堕棿鍐呭嵆浣挎湭瀹屾垚璁㈤槄涔熻繑鍥� + * + * @param topic 涓婚 + * @param size 涓婚闀垮害 + * @param sec 绉� + * @param nsec 绾崇 + * + * @return 0鏄垚鍔燂紝鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ +int net_mod_socket_sub_timeout(void * _socket, void *topic, int size, int sec, int nsec); + + +/** + * @brief 璁㈤槄鎰熷叴瓒d富棰樼殑娑堟伅锛屼笉绠℃槸鍚﹀畬鎴愯闃呯珛鍒昏繑鍥� + * + * @param topic 涓婚 + * @param size 涓婚闀垮害 + * + * @return 0鏄垚鍔燂紝鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + * + */ int net_mod_socket_sub_nowait(void * _socket, void *topic, int size); -/************************************************ - * 鍙栨秷璁㈤槄鎸囧畾涓婚 - * @topic 涓婚,涓婚涓虹┖鏃跺彇娑堝叏閮ㄨ闃� - * @size 涓婚闀垮害 - * @key 鎬荤嚎绔彛 - ***********************************************/ +/** + * @brief 鍙栨秷璁㈤槄鎸囧畾涓婚 + * + * @param topic 涓婚,涓婚涓虹┖鏃跺彇娑堝叏閮ㄨ闃� + * @param size 涓婚闀垮害 + * + * @return 0鏄垚鍔燂紝鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_desub(void * _socket, void *topic, int size); -/************************************************ - * 鍙栨秷璁㈤槄鎸囧畾涓婚 瓒呮椂杩斿洖銆� - * @sec 绉� 锛� @nsec 绾崇 - ***********************************************/ + + +/** + * @brief 鍙栨秷璁㈤槄鎸囧畾涓婚锛屽湪鎸囧畾鏃堕棿鍐呭嵆浣挎湭瀹屾垚鍙栨秷璁㈤槄浠诲姟涔熻繑鍥� + * + * @param topic 涓婚,涓婚涓虹┖鏃跺彇娑堝叏閮ㄨ闃� + * @param size 涓婚闀垮害 + * @param sec 绉� + * @param nsec 绾崇 + * + * @return 0鏄垚鍔燂紝鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_desub_timeout(void * _socket, void *topic, int size, int sec, int nsec); -/************************************************ - * 鍙栨秷璁㈤槄鎸囧畾涓婚 涓嶇鎴愬姛涓庡惁绔嬪埢杩斿洖銆� - ***********************************************/ + + +/** + * @brief 鍙栨秷璁㈤槄鎸囧畾涓婚锛屼笉绠℃槸鍚﹀畬鎴愬彇娑堣闃呬换鍔¢兘瑕佺珛鍒昏繑鍥� + * + * @param topic 涓婚,涓婚涓虹┖鏃跺彇娑堝叏閮ㄨ闃� + * @param size 涓婚闀垮害 + * + * @return 0鏄垚鍔燂紝鍏朵粬鍊兼槸澶辫触鐨勯敊璇爜 + */ int net_mod_socket_desub_nowait(void * _socket, void *topic, int size); -/************************************************ - * 鑾峰彇soket绔彛鍙� - ***********************************************/ +/** + * @brief 鑾峰彇soket鐨刱ey + * @return key + */ int net_mod_socket_get_key(void * _socket) ; -/************************************************ - * 閿�姣乻endandrecv鏂规硶杩斿洖鐨勬秷鎭粍 - * @arr 娑堟伅缁� - * @size 娑堟伅缁勭殑闀垮害 - ***********************************************/ +/** + * @brief 閿�姣乻endandrecv鏂规硶杩斿洖鐨勬秷鎭粍 + * + * @param arr 娑堟伅缁� + * @param size 娑堟伅缁勭殑闀垮害 + */ void net_mod_socket_free_recv_msg_arr(net_mod_recv_msg_t * arr, int size); -/************************************************ - * 閲婃斁瀛樺偍鎺ユ敹淇℃伅鐨刡uf - ***********************************************/ +/** + * @brief 閲婃斁瀛樺偍鎺ユ敹淇℃伅鐨刡uf + */ void net_mod_socket_free(void *buf) ; -/************************************************ - * 鍒犻櫎key瀵瑰簲鐨勫叡浜槦鍒楋紝骞跺湪bus閲屽垹闄よkey鐨勮闃� - ***********************************************/ +/** + * @brief 鍒犻櫎key瀵瑰簲鐨勫叡浜槦鍒楋紝骞跺湪bus閲屽垹闄よkey鐨勮闃� + * + * @return 鍒犻櫎鐨刱ey鐨勬暟閲� + */ int shm_mod_socket_remove_key(int key); -/************************************************ - * 鎵归噺鍒犻櫎key瀵瑰簲鐨勫叡浜槦鍒楋紝骞跺湪bus閲屽垹闄よkey鐨勮闃� - ***********************************************/ +/** + * @brief 鎵归噺鍒犻櫎key瀵瑰簲鐨勫叡浜槦鍒楋紝骞跺湪bus閲屽垹闄よkey鐨勮闃� + * + * @return 鍒犻櫎鐨刱ey鐨勬暟閲� + */ int shm_mod_socket_remove_keys(int keys[], int length); #ifdef __cplusplus -- Gitblit v1.8.0