Kaynağa Gözat

add netserver reset callback and session poll callback

WKJay 4 yıl önce
ebeveyn
işleme
6607a63e41
3 değiştirilmiş dosya ile 17 ekleme ve 2 silme
  1. 9 0
      netserver.c
  2. 6 2
      netserver.h
  3. 2 0
      readme.md

+ 9 - 0
netserver.c

@@ -233,6 +233,9 @@ static void ns_session_handle(netserver_mgr_t *mgr, fd_set *readset,
     for (cur_conn = mgr->conns; cur_conn; cur_conn = next_conn) {
         // obtain next session in case current session be closed
         next_conn = cur_conn->next;
+        if (mgr->opts.callback.session_poll_cb) {
+            mgr->opts.callback.session_poll_cb(cur_conn);
+        }
         if (FD_ISSET(cur_conn->socket, excptset)) {
             NS_LOG("socket %d error,now close", cur_conn->socket);
             ns_session_close(mgr, cur_conn);
@@ -452,6 +455,9 @@ static void netserver_handle(void *param) {
 
         check_session_timeout(mgr);
         if (sockfd == 0) {
+            if (mgr->opts.callback.session_poll_cb) {
+                mgr->opts.callback.session_poll_cb(NULL);
+            }
             // NS_LOG("net server select timeout");
             continue;
         } else if (sockfd == -1) {
@@ -528,6 +534,9 @@ static void netserver_handle(void *param) {
 
 exit:
     netserver_close_all(mgr);
+    if (mgr->opts.callback.netserver_reset_cb) {
+        mgr->opts.callback.netserver_reset_cb(mgr);
+    }
 }
 
 static void netserver(void *param) {

+ 6 - 2
netserver.h

@@ -14,6 +14,8 @@
 #define NS_SSL_VERIFY_PEER     (1 << 5)
 #define NS_SSL_FORCE_PEER_CERT (1 << 6)  // if no peer cert , handshake fails
 
+typedef struct _netserver_mgr netserver_mgr_t;
+
 /**
  * netserver session struct
  * */
@@ -35,13 +37,15 @@ typedef struct _ns_session {
  * netserver callback
  * */
 typedef struct _netserver_cb {
+    void (*netserver_reset_cb)(netserver_mgr_t *mgr);
+
     void (*session_create_cb)(ns_session_t *session);
     void (*session_close_cb)(ns_session_t *session);
     int (*session_accept_cb)(ns_session_t *session);
+    int (*session_poll_cb)(ns_session_t *session);
     int (*data_readable_cb)(ns_session_t *session, void *data, int sz);
 #if NS_ENABLE_SSL
-    int (*ssl_handshake_cb)(ns_session_t *session, void *cert_data,
-                            int cert_size);
+    int (*ssl_handshake_cb)(ns_session_t *session, void *cert_data, int cert_size);
 #endif
 } netserver_cb_t;
 

+ 2 - 0
readme.md

@@ -87,9 +87,11 @@ typedef struct _netserver_opt {
 
     |成员名|描述|
     |-|-|
+    |netserver_reset_cb|当 netserver 即将重启时被调用|
     |session_create_cb|当一条客户端连接被创建后被调用|
     |session_close_cb|当一条连接被关闭后被调用|
     |session_accept_cb|当一条连接被接入后被调用|
+    |session_poll_cb|当触发轮询事件后被调用(数据可读/连接异常/select 超时)|
     |data_readable_cb|当一条连接上有数据到达后被调用|
     |ssl_handshake_cb|**[SSL/TLS]** 当一条连接进行SSL握手后被调用|