Net.txt.templ 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. MODULE LinNet ["libc.so%%libver%%"];
  2. (*
  3. %%osname%%
  4. %%machine%%
  5. *)
  6. CONST
  7. NULL* = 0H;
  8. SOCKET_ERROR* = -1;
  9. INVALID_SOCKET* = -1;
  10. INADDR_NONE* = -1;
  11. INADDR_ANY* = 0;
  12. (* socket domains *)
  13. %%defs-af%%
  14. (* socket types *)
  15. %%defs-sock%%
  16. (* socket protocols *)
  17. %%defs-proto%%
  18. (* socket options *)
  19. %%defs-so%%
  20. %%defs-shut%%
  21. %%defs-sol%%
  22. %%defs-msg%%
  23. %%defs-somaxconn%%
  24. (* addrinfo.ai_flags *)
  25. %%defs-ai%%
  26. (* getaddrinfo/getnameinfo/gai_strerror error codes *)
  27. %%defs-eai%%
  28. %%defs-fd_set-const%%
  29. TYPE
  30. u_int8_t = SHORTCHAR;
  31. int8_t = SHORTCHAR;
  32. uint16_t = SHORTINT;
  33. (* PtrVoid, int, intFlags, short, socklen_t, size_t, ssize_t, in_addr_t, in_port_t, time_t, suseconds_t, nfds_t, sa_family_t *)
  34. %%defs-basictypes%%
  35. PtrSTR* = POINTER [untagged] TO ARRAY [untagged] OF SHORTCHAR;
  36. SOCKET* = int;
  37. (*
  38. in_addr* = RECORD [untagged]
  39. s_addr*: in_addr_t;
  40. END;
  41. *)
  42. in_addr* = RECORD [untagged]
  43. S_un*: RECORD [union]
  44. S_un_b*: RECORD [untagged]
  45. s_b1*: SHORTCHAR;
  46. s_b2*: SHORTCHAR;
  47. s_b3*: SHORTCHAR;
  48. s_b4*: SHORTCHAR;
  49. END;
  50. S_un_w*: RECORD [untagged]
  51. s_w1*: SHORTINT;
  52. s_w2*: SHORTINT;
  53. END;
  54. S_addr*: in_addr_t;
  55. END;
  56. END;
  57. Ptrsockaddr* = POINTER [untagged] TO sockaddr;
  58. sockaddr* = RECORD [untagged]
  59. %%fields-sockaddr%%
  60. END;
  61. Ptrsockaddr_storage = POINTER [untagged] TO sockaddr_storage;
  62. sockaddr_storage* = RECORD [untagged]
  63. %%fields-sockaddr_storage%%
  64. END;
  65. Ptrsockaddr_in* = POINTER [untagged] TO sockaddr_in;
  66. sockaddr_in* = RECORD [untagged]
  67. %%fields-sockaddr_in%%
  68. END;
  69. Ptraddrinfo* = POINTER [untagged] TO addrinfo;
  70. addrinfo* = RECORD [untagged]
  71. %%fields-addrinfo%%
  72. END;
  73. timeval* = RECORD [untagged]
  74. (* Linux, FreeBSD, OpenBSD *)
  75. tv_sec*: time_t; (* seconds *)
  76. tv_usec*: suseconds_t; (* and microseconds *)
  77. END;
  78. pollfd* = RECORD [untagged]
  79. (* Linux, FreeBSD, OpenBSD *)
  80. fd*: int;
  81. events*: short;
  82. revents*: short;
  83. END;
  84. %%defs-fd_set-type%%
  85. (* POSIX.1 *)
  86. PROCEDURE [ccall] socket* (domain: int; type: int; protocol: int): SOCKET;
  87. PROCEDURE [ccall] accept* (s: SOCKET; VAR addr: sockaddr; VAR addrlen: socklen_t): SOCKET;
  88. PROCEDURE [ccall] bind* (s: SOCKET; VAR name: sockaddr; namelen: socklen_t): int;
  89. PROCEDURE [ccall] connect* (s: SOCKET; VAR name: sockaddr; namelen: socklen_t): int;
  90. PROCEDURE [ccall] getsockname* (s: SOCKET; VAR name: sockaddr; VAR namelen: socklen_t): int;
  91. PROCEDURE [ccall] listen* (s: SOCKET; backlog: int): int;
  92. PROCEDURE [ccall] recv* (s: SOCKET; buf: PtrVoid; len: size_t; flags: intFlags): ssize_t;
  93. PROCEDURE [ccall] recvfrom* (s: SOCKET; buf: PtrVoid; len: size_t; flags: intFlags; VAR from: sockaddr; VAR fromlen: socklen_t): ssize_t;
  94. PROCEDURE [ccall] send* (s: SOCKET; msg: PtrVoid; len: size_t; flags: intFlags): ssize_t;
  95. PROCEDURE [ccall] sendto* (s: SOCKET; msg: PtrVoid; len: size_t; flags: intFlags; VAR to: sockaddr; tolen: socklen_t): ssize_t;
  96. PROCEDURE [ccall] shutdown* (s: SOCKET; how: int): int;
  97. PROCEDURE [ccall] getsockopt* (s: SOCKET; level: int; optname: intFlags; optval: PtrVoid; VAR [nil] optlen: socklen_t): int;
  98. PROCEDURE [ccall] setsockopt* (s: SOCKET; level: int; optname: intFlags; optval: PtrVoid; optlen: socklen_t): int;
  99. PROCEDURE [ccall] inet_addr* (cp: PtrSTR): in_addr_t;
  100. PROCEDURE [ccall] htons* (host16: uint16_t): uint16_t;
  101. PROCEDURE [ccall] select* (nfds: INTEGER; VAR [nil] readfds: fd_set; VAR [nil] writefds: fd_set; VAR [nil] exceptfds: fd_set; VAR timeout: timeval): int;
  102. PROCEDURE [ccall] poll* (VAR fds: ARRAY [untagged] OF pollfd; nfds: nfds_t; timeout: int): int;
  103. (*
  104. PROCEDURE FD_ZERO (VAR set: Net.fd_set);
  105. VAR i: INTEGER;
  106. BEGIN
  107. i := LEN(set); REPEAT DEC(i); set[i] := {} UNTIL i = 0
  108. END FD_ZERO;
  109. PROCEDURE FD_SET (fd: Net.SOCKET; VAR set: Net.fd_set);
  110. BEGIN
  111. INCL(set[fd DIV 32], fd MOD 32)
  112. END FD_SET;
  113. *)
  114. (* POSIX.1g *)
  115. PROCEDURE [ccall] getaddrinfo* (hostname: PtrSTR; servname: PtrSTR; VAR [nil] hints: addrinfo; VAR res: Ptraddrinfo): int;
  116. PROCEDURE [ccall] freeaddrinfo* (ai: Ptraddrinfo);
  117. PROCEDURE [ccall] gai_strerror* (ecode: int): PtrSTR;
  118. END LinNet.