RyanW5500Socket.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #ifndef __RyanW5500Socket__
  2. #define __RyanW5500Socket__
  3. #include "RyanW5500Store.h"
  4. #ifdef __cplusplus
  5. extern "C"
  6. {
  7. #endif
  8. typedef enum
  9. {
  10. WIZ_EVENT_SEND = 0,
  11. WIZ_EVENT_RECV,
  12. WIZ_EVENT_ERROR,
  13. } RyanW5500Event_e;
  14. // 定义枚举类型
  15. typedef enum
  16. {
  17. RyanW5500SocketInit, // 初始化状态
  18. RyanW5500SocketEstablished, // 以连接状态,调用connect后
  19. RyanW5500SocketListen, // 监听状态
  20. RyanW5500SocketClose, // 关闭状态
  21. } RyanW5500SocketState_e;
  22. typedef struct
  23. {
  24. int backlog; // 剩余accept连接个数
  25. rt_mq_t clientInfoQueueHandle; // 连接的客户端信息地址
  26. RyanList_t clientList; // 客户端的列表
  27. } RyanW5500ServiceInfo;
  28. typedef struct
  29. {
  30. uint8_t type; // WIZnet 套接字的类型(TCP、UDP 或 RAW)
  31. uint8_t soOptionsFlag; // so_options标志位
  32. int8_t serviceSocket; // 当前套接字是listen套接字客户端时,存储listen服务套接字
  33. uint16_t rcvevent; // 接收数据次数
  34. uint16_t sendevent; // 发送确认数据次数
  35. uint16_t errevent; // 套接字发生错误
  36. uint16_t port; // 当前socket端口
  37. int socket; // w5500 真实socket套接字
  38. uint32_t magic; //
  39. uint32_t recvTimeout; // 接收数据超时(以毫秒为单位)
  40. uint32_t sendTimeout; // 等待发送超时(以毫秒为单位)
  41. RyanW5500SocketState_e state; // RyanW5500 套接字的当前状态
  42. struct sockaddr *remoteAddr; // 远程地址
  43. RyanW5500ServiceInfo *serviceInfo; // 服务器套接字信息
  44. rt_mutex_t recvLock; // 读取数据锁
  45. #ifdef SAL_USING_POSIX
  46. rt_wqueue_t wait_head;
  47. #endif
  48. } RyanW5500Socket;
  49. typedef struct
  50. {
  51. RyanW5500Socket *sock;
  52. RyanList_t list;
  53. } RyanW5500ClientInfo;
  54. /* extern variables-----------------------------------------------------------*/
  55. extern int wiz_socket(int domain, int type, int protocol);
  56. extern int wiz_closesocket(int socket);
  57. extern int wiz_shutdown(int socket, int how);
  58. extern int wiz_listen(int socket, int backlog);
  59. extern int wiz_bind(int socket, const struct sockaddr *name, socklen_t namelen);
  60. extern int wiz_connect(int socket, const struct sockaddr *name, socklen_t namelen);
  61. extern int wiz_accept(int socket, struct sockaddr *addr, socklen_t *addrlen);
  62. extern int wiz_sendto(int socket, const void *dwiza, size_t size, int flags, const struct sockaddr *to, socklen_t tolen);
  63. extern int wiz_send(int socket, const void *dwiza, size_t size, int flags);
  64. extern int wiz_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
  65. extern int wiz_recv(int socket, void *mem, size_t len, int flags);
  66. extern int wiz_getsockopt(int socket, int level, int optname, void *optval, socklen_t *optlen);
  67. extern int wiz_setsockopt(int socket, int level, int optname, const void *optval, socklen_t optlen);
  68. extern struct hostent *wiz_gethostbyname(const char *name);
  69. extern int wiz_gethostbyname_r(const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop);
  70. extern int wiz_getaddrinfo(const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res);
  71. extern void wiz_freeaddrinfo(struct addrinfo *ai);
  72. extern RyanW5500Socket *RyanW5500GetSock(int socket); // 获取 WIZnet 套接字对象
  73. extern RyanW5500Socket *RyanW5500SocketCreate(int type, int port);
  74. extern void RyanListenServiceAddClient(RyanW5500Socket *serviceSock, RyanW5500Socket *clientSock);
  75. extern int RyanW5500RecvDataCallback(int socket);
  76. extern int RyanW5500CloseCallback(int socket);
  77. #ifdef __cplusplus
  78. }
  79. #endif
  80. #endif