wangzhengquan
2021-02-04 1814e8e59a12fedb020eebcf0da2e79dd3fd2353
update
3个文件已修改
48 ■■■■ 已修改文件
src/net/net_mod_socket_wrapper.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/net/net_mod_socket_wrapper.h 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test_net_socket/test_net_mod_socket.cpp 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/net/net_mod_socket_wrapper.cpp
@@ -114,20 +114,20 @@
}
int net_mod_socket_recvandsend(void *_socket, recvandsend_callback_fn callback, void * user_data) {
int net_mod_socket_recvandsend(void *_socket, recvandsend_callback_wrapper_fn callback, void * user_data) {
  NetModSocket *sockt = (NetModSocket *)_socket;
  return sockt->recvandsend(  callback, NULL, 0, user_data);
}
int net_mod_socket_recvandsend_timeout(void *_socket, recvandsend_callback_fn callback,
int net_mod_socket_recvandsend_timeout(void *_socket, recvandsend_callback_wrapper_fn callback,
                                       int sec, int nsec, void * user_data) {
  NetModSocket *sockt = (NetModSocket *)_socket;
  struct timespec timeout = {sec, nsec};
  return sockt->recvandsend(  callback, &timeout, BUS_TIMEOUT_FLAG, user_data);
}
int net_mod_socket_recvandsend_nowait(void *_socket,  recvandsend_callback_fn callback, void * user_data) {
int net_mod_socket_recvandsend_nowait(void *_socket,  recvandsend_callback_wrapper_fn callback, void * user_data) {
  NetModSocket *sockt = (NetModSocket *)_socket;
  return sockt->recvandsend(  callback, NULL, BUS_NOWAIT_FLAG, user_data);
}
src/net/net_mod_socket_wrapper.h
@@ -18,6 +18,7 @@
#endif
 
typedef void (*recvandsend_callback_wrapper_fn)(void *recvbuf, int recvsize, int key, void **sendbuf, int *sendsize, void * user_data);
@@ -165,7 +166,7 @@
/**
 * @brief 接受消息,并把callback函数返回的数据发送回对方,一直等待完成
 *
 * @callback  void (*recvandsend_callback_fn)(void *recvbuf, int recvsize, int key, void **sendbuf, int *sendsize, void * user_data)
 * @callback  void (*recvandsend_callback_wrapper_fn)(void *recvbuf, int recvsize, int key, void **sendbuf, int *sendsize, void * user_data)
 *                  @recvbuf 收到的数据, 该recvbuf使用完成后需要手动释放
 *                  @recvsize 收到的数据的大小
 *                  @key 接受数据并发送数据的对象
@@ -174,12 +175,12 @@
 *
 * @return 0是成功, 其他值是失败的错误码
 */
int net_mod_socket_recvandsend(void *_socket,  recvandsend_callback_fn callback, void * user_data);
int net_mod_socket_recvandsend(void *_socket,  recvandsend_callback_wrapper_fn callback, void * user_data);
/**
 * @brief 接受消息,并把callback函数返回的数据发送回对方,在指定的时间内即使没有完成也返回
 *
 * @callback  void (*recvandsend_callback_fn)(void *recvbuf, int recvsize, int key, void **sendbuf, int *sendsize, void * user_data)
 * @callback  void (*recvandsend_callback_wrapper_fn)(void *recvbuf, int recvsize, int key, void **sendbuf, int *sendsize, void * user_data)
 *                  @recvbuf 收到的数据, 该recvbuf使用完成后需要手动释放
 *                  @recvsize 收到的数据的大小
 *                  @key 接受数据并发送数据的对象
@@ -191,14 +192,14 @@
 *
 * @return 0是成功, 其他值是失败的错误码
 */
int net_mod_socket_recvandsend_timeout(void *_socket, recvandsend_callback_fn callback,
int net_mod_socket_recvandsend_timeout(void *_socket, recvandsend_callback_wrapper_fn callback,
                                       int sec, int nsec, void * user_data ) ;
/**
 * @brief 接受消息,并把callback函数返回的数据发送回对方,无论成功与否立刻返回
 *
 * @callback  void (*recvandsend_callback_fn)(void *recvbuf, int recvsize, int key, void **sendbuf, int *sendsize, void * user_data)
 * @callback  void (*recvandsend_callback_wrapper_fn)(void *recvbuf, int recvsize, int key, void **sendbuf, int *sendsize, void * user_data)
 *                  @recvbuf 收到的数据, 该recvbuf使用完成后需要手动释放
 *                  @recvsize 收到的数据的大小
 *                  @key 接受数据并发送数据的对象
@@ -207,7 +208,7 @@
 *
 * @return 0是成功, 其他值是失败的错误码
 */
int net_mod_socket_recvandsend_nowait(void *_socket, recvandsend_callback_fn callback, void * user_data) ;
int net_mod_socket_recvandsend_nowait(void *_socket, recvandsend_callback_wrapper_fn callback, void * user_data) ;
/**
test_net_socket/test_net_mod_socket.cpp
@@ -131,25 +131,28 @@
  }
}
void *ser;
static void _recvandsend_callback_(void *recvbuf, int recvsize, int key, void **sendbuf_ptr, int *sendsize_ptr, void * user_data) {
  char sendbuf[512];
  printf( "server: RECEIVED REQUEST FROM  %d : %s\n", key, (char *)recvbuf);
  sprintf(sendbuf, "%d RECEIVED %s", net_mod_socket_get_key(ser), (char *)recvbuf);
  // buf 和 size是返回值
  *sendbuf_ptr = sendbuf;
  *sendsize_ptr = strlen(sendbuf) + 1;
  //recvbuf是分配到堆里的,使用完后不要忘记释放掉
  free(recvbuf);
  return;
}
void start_reply(int mkey) {
  printf("start reply\n");
  void *ser = net_mod_socket_open();
  ser = net_mod_socket_open();
  net_mod_socket_bind(ser, mkey);
  char sendbuf[512];
  int rv;
  while(true) {
    rv = net_mod_socket_recvandsend_timeout(ser, [&]( void *recvbuf, int recvsize, int key, void ** sendbuf_ptr, int *sendsize_ptr, void * user_data){
    printf( "server: RECEIVED REQUEST FROM  %d : %s\n", key, (char *)recvbuf);
    sprintf(sendbuf, "%d RECEIVED %s", net_mod_socket_get_key(ser), (char *)recvbuf);
    // buf 和 size是返回值
    *sendbuf_ptr = sendbuf;
    *sendsize_ptr = strlen(sendbuf) + 1;
    //recvbuf是分配到堆里的,使用完后不要忘记释放掉
    free(recvbuf);
    return;
    }, 0, 2000000, NULL );
    rv = net_mod_socket_recvandsend_timeout(ser, _recvandsend_callback_ , 0, 2000000, NULL );
  }
  // while ( (rv = net_mod_socket_recvfrom(ser, &recvbuf, &size, &key) ) == 0) {
  //  // printf( "server: RECEIVED REQUEST FROM  %d NAME %s\n", key, recvbuf);