1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- //+build windows
- package ENet
- // When we implement the appropriate bindings for Windows, the section separated
- // by `{` and `}` here can be removed in favor of using the bindings.
- // {
- foreign import WinSock2 "system:Ws2_32.lib"
- @(private="file", default_calling_convention="c")
- foreign WinSock2 {
- __WSAFDIsSet :: proc(fd: SOCKET, s: ^fd_set) -> i32 ---
- }
- @(private="file") SOCKET :: uintptr
- @(private="file") FD_SETSIZE :: 64
- @(private="file") fd_set :: struct {
- fd_count: u32,
- fd_array: [FD_SETSIZE]SOCKET,
- }
- @(private="file") FD_CLR :: proc "contextless" (fd: SOCKET, s: ^fd_set) {
- for i := u32(0); i < s.fd_count; i += 1 {
- if s.fd_array[i] == fd {
- for i < s.fd_count - 1 {
- s.fd_array[i] = s.fd_array[i + 1]
- i += 1
- }
- s.fd_count -= 1
- break
- }
- }
- }
- @(private="file") FD_SET :: proc "contextless" (fd: SOCKET, s: ^fd_set) {
- for i := u32(0); i < s.fd_count; i += 1 {
- if s.fd_array[i] == fd {
- return
- }
- }
- if s.fd_count >= FD_SETSIZE {
- return
- }
- s.fd_array[s.fd_count] = fd
- s.fd_count += 1
- }
- @(private="file") FD_ZERO :: #force_inline proc "contextless" (s: ^fd_set) {
- s.fd_count = 0
- }
- @(private="file") FD_ISSET :: #force_inline proc "contextless" (fd: SOCKET, s: ^fd_set) -> bool {
- return __WSAFDIsSet(fd, s) != 0
- }
- // }
- Socket :: distinct SOCKET
- SOCKET_NULL :: Socket(~uintptr(0))
- 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(SOCKET(socket), cast(^fd_set)sockset)
- }
- SOCKETSET_REMOVE :: #force_inline proc "contextless" (sockset: ^SocketSet, socket: Socket) {
- FD_CLR(SOCKET(socket), cast(^fd_set)sockset)
- }
- SOCKSET_CHECK :: #force_inline proc "contextless" (sockset: ^SocketSet, socket: Socket) -> bool {
- return FD_ISSET(SOCKET(socket), cast(^fd_set)sockset)
- }
|