tcpserver.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2019-07-11 flybreak the first version
  9. */
  10. #ifndef _TCPSERVER__
  11. #define _TCPSERVER__
  12. #include <rtthread.h>
  13. #include <stdlib.h>
  14. #include <netdb.h>
  15. #include <sys/socket.h>
  16. #include <sys/select.h>
  17. #include <sys/time.h>
  18. #if defined(RT_VERSION_CHECK)
  19. #if (RTTHREAD_VERSION >= RT_VERSION_CHECK(5, 1, 0))
  20. #define server_thread_stat RT_SCHED_CTX(server->thread).stat
  21. #else
  22. #define server_thread_stat server->thread->stat
  23. #endif
  24. #endif
  25. /* configurable options */
  26. #ifndef PKG_USING_TCPSERVER
  27. #define TCPSERVER_NAME "tcpserv"
  28. #define TCPSERVER_STACK_SIZE 4096
  29. #define TCPSERVER_PRIO 12
  30. #define TCPSERVER_SOCKET_MAX 1024
  31. #define TCPSERVER_CLI_NUM 5
  32. #endif
  33. /* run state */
  34. #define TCPSERVER_STATE_INIT 0
  35. #define TCPSERVER_STATE_RUN 1
  36. #define TCPSERVER_STATE_STOP 2
  37. /* event flag */
  38. #define TCPSERVER_EVENT_CONNECT (1 << 0)
  39. #define TCPSERVER_EVENT_DISCONNECT (1 << 1)
  40. #define TCPSERVER_EVENT_RECV (1 << 2)
  41. typedef struct tcpclient *tcpclient_t;
  42. struct tcpserver
  43. {
  44. const char *ip;
  45. rt_uint16_t port;
  46. int sock;
  47. rt_uint8_t state;
  48. fd_set read_set;
  49. fd_set write_set;
  50. int fd_max;
  51. rt_mailbox_t mailbox;
  52. rt_thread_t thread;
  53. tcpclient_t *cli_list;
  54. void (*tcpserver_event_notify)(tcpclient_t client, rt_uint8_t event);
  55. };
  56. struct tcpclient
  57. {
  58. struct tcpserver *server;
  59. int sock;
  60. rt_event_t event;
  61. };
  62. struct tcpserver *tcpserver_create(const char *ip, rt_uint16_t port);
  63. rt_err_t tcpserver_destroy(struct tcpserver *server);
  64. tcpclient_t tcpserver_accept(struct tcpserver *server, rt_int32_t timeout);
  65. rt_err_t tcpserver_close(tcpclient_t client);
  66. rt_size_t tcpserver_recv(tcpclient_t client, void *buf, rt_size_t size, rt_int32_t timeout);
  67. rt_size_t tcpserver_send(tcpclient_t client, void *buf, rt_size_t size, rt_int32_t timeout); /* timeout unrealized */
  68. void tcpserver_set_notify_callback(struct tcpserver *server,
  69. void (*tcpserver_event_notify)(tcpclient_t client, rt_uint8_t event));
  70. #endif