mirror of
https://github.com/odin-lang/Odin.git
synced 2026-06-14 14:23:43 +00:00
60 lines
1.7 KiB
Odin
60 lines
1.7 KiB
Odin
#+build linux, darwin, freebsd, openbsd, netbsd
|
|
package ENet
|
|
|
|
// When we implement the appropriate bindings for Unix, the section separated
|
|
// by `{` and `}` here can be removed in favor of using the bindings.
|
|
// {
|
|
import "core:c"
|
|
|
|
@(private="file") FD_SETSIZE :: 1024
|
|
|
|
@(private="file") fd_set :: struct {
|
|
fds_bits: [FD_SETSIZE / 8 / size_of(c.long)]c.ulong,
|
|
}
|
|
|
|
@(private="file") FD_ZERO :: #force_inline proc "contextless" (s: ^fd_set) {
|
|
for i := size_of(fd_set) / size_of(c.long); i != 0; i -= 1 {
|
|
s.fds_bits[i] = 0
|
|
}
|
|
}
|
|
|
|
@(private="file") FD_SET :: #force_inline proc "contextless" (d: i32, s: ^fd_set) {
|
|
s.fds_bits[d / (8 * size_of(c.long))] |= c.ulong(1) << (c.ulong(d) % (8 * size_of(c.ulong)))
|
|
}
|
|
|
|
@(private="file") FD_CLR :: #force_inline proc "contextless" (d: i32, s: ^fd_set) {
|
|
s.fds_bits[d / (8 * size_of(c.long))] &~= c.ulong(1) << (c.ulong(d) % (8 * size_of(c.ulong)))
|
|
}
|
|
|
|
@(private="file") FD_ISSET :: #force_inline proc "contextless" (d: i32, s: ^fd_set) -> bool {
|
|
return (s.fds_bits[d / (8 * size_of(c.long))] & c.ulong(1) << (c.ulong(d) % (8 * size_of(c.ulong)))) != 0
|
|
}
|
|
// }
|
|
|
|
Socket :: distinct i32
|
|
|
|
SOCKET_NULL :: Socket(-1)
|
|
|
|
Buffer :: struct {
|
|
data: rawptr,
|
|
dataLength: uint,
|
|
}
|
|
|
|
SocketSet :: distinct fd_set
|
|
|
|
SOCKETSET_EMPTY :: #force_inline proc "contextless" (sockset: ^SocketSet) {
|
|
FD_ZERO(cast(^fd_set)sockset)
|
|
}
|
|
|
|
SOCKETSET_ADD :: #force_inline proc "contextless" (sockset: ^SocketSet, socket: Socket) {
|
|
FD_SET(i32(socket), cast(^fd_set)sockset)
|
|
}
|
|
|
|
SOCKETSET_REMOVE :: #force_inline proc "contextless" (sockset: ^SocketSet, socket: Socket) {
|
|
FD_CLR(i32(socket), cast(^fd_set)sockset)
|
|
}
|
|
|
|
SOCKSET_CHECK :: #force_inline proc "contextless" (sockset: ^SocketSet, socket: Socket) -> bool {
|
|
return FD_ISSET(i32(socket), cast(^fd_set)sockset)
|
|
}
|