Net.txt.templ 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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. (* addrinfo.ai_flags *)
  24. %%defs-ai%%
  25. (* getaddrinfo/getnameinfo/gai_strerror error codes *)
  26. %%defs-eai%%
  27. %%defs-fd_set-const%%
  28. TYPE
  29. u_int8_t = SHORTCHAR;
  30. int8_t = SHORTCHAR;
  31. uint16_t = SHORTINT;
  32. (* 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 *)
  33. %%defs-basictypes%%
  34. PtrSTR* = POINTER [untagged] TO ARRAY [untagged] OF SHORTCHAR;
  35. SOCKET* = int;
  36. (*
  37. in_addr* = RECORD [untagged]
  38. s_addr*: in_addr_t;
  39. END;
  40. *)
  41. in_addr* = RECORD [untagged]
  42. S_un*: RECORD [union]
  43. S_un_b*: RECORD [untagged]
  44. s_b1*: SHORTCHAR;
  45. s_b2*: SHORTCHAR;
  46. s_b3*: SHORTCHAR;
  47. s_b4*: SHORTCHAR;
  48. END;
  49. S_un_w*: RECORD [untagged]
  50. s_w1*: SHORTINT;
  51. s_w2*: SHORTINT;
  52. END;
  53. S_addr*: in_addr_t;
  54. END;
  55. END;
  56. Ptrsockaddr* = POINTER [untagged] TO sockaddr;
  57. sockaddr* = RECORD [untagged]
  58. %%fields-sockaddr%%
  59. END;
  60. Ptrsockaddr_storage = POINTER [untagged] TO sockaddr_storage;
  61. sockaddr_storage* = RECORD [untagged]
  62. %%fields-sockaddr_storage%%
  63. END;
  64. Ptrsockaddr_in* = POINTER [untagged] TO sockaddr_in;
  65. sockaddr_in* = RECORD [untagged]
  66. %%fields-sockaddr_in%%
  67. END;
  68. Ptraddrinfo* = POINTER [untagged] TO addrinfo;
  69. addrinfo* = RECORD [untagged]
  70. (* Linux, FreeBSD, OpenBSD *)
  71. ai_flags*: intFlags; (* input flags *)
  72. ai_family*: int; (* protocol family for socket *)
  73. ai_socktype*: int; (* socket type *)
  74. ai_protocol*: int; (* protocol for socket *)
  75. ai_addrlen*: socklen_t; (* length of socket-address *)
  76. ai_addr*: Ptrsockaddr; (* socket-address for socket *)
  77. ai_canonname*: PtrSTR; (* canonical name for service location (iff req) *)
  78. ai_next*: Ptraddrinfo; (* pointer to next in list *)
  79. END;
  80. timeval* = RECORD [untagged]
  81. (* Linux, FreeBSD, OpenBSD *)
  82. tv_sec*: time_t; (* seconds *)
  83. tv_usec*: suseconds_t; (* and microseconds *)
  84. END;
  85. pollfd* = RECORD [untagged]
  86. (* Linux, FreeBSD, OpenBSD *)
  87. fd*: int;
  88. events*: short;
  89. revents*: short;
  90. END;
  91. %%defs-fd_set-type%%
  92. (* POSIX.1 *)
  93. PROCEDURE [ccall] socket* (domain: int; type: int; protocol: int): SOCKET;
  94. PROCEDURE [ccall] accept* (s: SOCKET; VAR addr: sockaddr; VAR addrlen: socklen_t): SOCKET;
  95. PROCEDURE [ccall] bind* (s: SOCKET; VAR name: sockaddr; namelen: socklen_t): int;
  96. PROCEDURE [ccall] connect* (s: SOCKET; VAR name: sockaddr; namelen: socklen_t): int;
  97. PROCEDURE [ccall] getsockname* (s: SOCKET; VAR name: sockaddr; VAR namelen: socklen_t): int;
  98. PROCEDURE [ccall] listen* (s: SOCKET; backlog: int): int;
  99. PROCEDURE [ccall] recv* (s: SOCKET; buf: PtrVoid; len: size_t; flags: intFlags): ssize_t;
  100. PROCEDURE [ccall] send* (s: SOCKET; msg: PtrVoid; len: size_t; flags: intFlags): ssize_t;
  101. PROCEDURE [ccall] shutdown* (s: SOCKET; how: int): int;
  102. PROCEDURE [ccall] getsockopt* (s: SOCKET; level: int; optname: intFlags; optval: PtrVoid; VAR [nil] optlen: socklen_t): int;
  103. PROCEDURE [ccall] setsockopt* (s: SOCKET; level: int; optname: intFlags; optval: PtrVoid; optlen: socklen_t): int;
  104. PROCEDURE [ccall] inet_addr* (cp: PtrSTR): in_addr_t;
  105. PROCEDURE [ccall] htons* (host16: uint16_t): uint16_t;
  106. PROCEDURE [ccall] select* (nfds: INTEGER; VAR [nil] readfds: fd_set; VAR [nil] writefds: fd_set; VAR [nil] exceptfds: fd_set; VAR timeout: timeval): int;
  107. PROCEDURE [ccall] poll* (VAR fds: ARRAY [untagged] OF pollfd; nfds: nfds_t; timeout: int): int;
  108. (*
  109. PROCEDURE FD_ZERO (VAR set: Net.fd_set);
  110. VAR i: INTEGER;
  111. BEGIN
  112. i := LEN(set); REPEAT DEC(i); set[i] := {} UNTIL i = 0
  113. END FD_ZERO;
  114. PROCEDURE FD_SET (fd: Net.SOCKET; VAR set: Net.fd_set);
  115. BEGIN
  116. INCL(set[fd DIV 32], fd MOD 32)
  117. END FD_SET;
  118. *)
  119. (* POSIX.1g *)
  120. PROCEDURE [ccall] getaddrinfo* (hostname: PtrSTR; servname: PtrSTR; VAR [nil] hints: addrinfo; VAR res: Ptraddrinfo): int;
  121. PROCEDURE [ccall] freeaddrinfo* (ai: Ptraddrinfo);
  122. PROCEDURE [ccall] gai_strerror* (ecode: int): PtrSTR;
  123. END LinNet.