Subversion Repositories Kolibri OS

Rev

Rev 9811 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /* Copyright (C) 2019-2021 Logaev Maxim (turbocat2001), GPLv2 */
  2.  
  3. #ifndef _SOCKET_H_
  4. #define _SOCKET_H_
  5.  
  6. #include <errno.h>
  7. #include <stddef.h>
  8. #include <sys/ksys.h>
  9.  
  10. // Socket Types
  11. #define SOCK_STREAM 1
  12. #define SOCK_DGRAM  2
  13. #define SOCK_RAW    3
  14.  
  15. // IP protocols
  16. #define IPPROTO_IP   0
  17. #define IPPROTO_ICMP 1
  18. #define IPPROTO_TCP  6
  19. #define IPPROTO_UDP  17
  20. #define IPPROTO_RAW  255
  21.  
  22. // IP options
  23. #define IP_TTL 2
  24.  
  25. // Address families
  26. #define AF_UNSPEC 0
  27. #define AF_LOCAL  1
  28. #define AF_INET   2  // Default INET=IPv4
  29. #define AF_INET4  2  // IPv4
  30. #define AF_INET6  10 // IPv6
  31.  
  32. #define PF_UNSPEC AF_UNSPEC
  33. #define PF_LOCAL  AF_LOCAL
  34. #define PF_INET4  AF_INET4
  35. #define PF_INET6  AF_INET6
  36.  
  37. // internal definition
  38. #define AI_SUPPORTED 0x40F
  39.  
  40. // for system function 76
  41. #define API_ETH   (0 << 16)
  42. #define API_IPv4  (1 << 16)
  43. #define API_ICMP  (2 << 16)
  44. #define API_UDP   (3 << 16)
  45. #define API_TCP   (4 << 16)
  46. #define API_ARP   (5 << 16)
  47. #define API_PPPOE (6 << 16)
  48.  
  49. // Socket flags for user calls
  50. #define MSG_NOFLAG   0
  51. #define MSG_PEEK     0x02
  52. #define MSG_DONTWAIT 0x40
  53.  
  54. // Socket levels
  55. #define SOL_SOCKET 0xffff
  56.  
  57. // Socket options
  58. #define SO_BINDTODEVICE (1 << 9)
  59. #define SO_NONBLOCK     (1 << 31)
  60.  
  61. #define PORT(X) (X << 8)
  62.  
  63. #pragma pack(push, 1)
  64. struct sockaddr {
  65.     unsigned short sin_family;
  66.     unsigned short sin_port;
  67.     unsigned int sin_addr;
  68.     unsigned long long sin_zero;
  69. };
  70.  
  71. typedef struct {
  72.     unsigned int level;
  73.     unsigned int optionname;
  74.     unsigned int optlenght;
  75.     unsigned char options;
  76. } optstruct;
  77. #pragma pack(pop)
  78.  
  79. DLLAPI int socket(int domain, int type, int protocol);
  80. DLLAPI int close(int socket);
  81. DLLAPI int bind(int socket, const struct sockaddr* addres, int addres_len);
  82. DLLAPI int listen(int socket, int backlog);
  83. DLLAPI int connect(int socket, const struct sockaddr* address, int socket_len);
  84. DLLAPI int accept(int socket, const struct sockaddr* address, int address_len);
  85. DLLAPI int send(int socket, const void* message, size_t msg_len, int flag);
  86. DLLAPI int recv(int socket, void* buffer, size_t buff_len, int flag);
  87. DLLAPI int setsockopt(int socket, const optstruct* opt);
  88. DLLAPI int getsockopt(int socket, optstruct* opt);
  89. DLLAPI int socketpair(int* socket1, int* socket2);
  90.  
  91. #endif //_SOCKET_H_