#+build linux #+vet explicit-allocators package wayland import "core:log" import "core:io" import "core:sys/linux" // ===================================================================================================================== // SOCKET BOILERPLATE _unix_socket_read :: proc(stream_data: rawptr, mode: io.Stream_Mode, buffer: []u8, offset: i64, whence: io.Seek_From) -> (n: i64, error: io.Error) { assert(mode == .Read) session := cast(^Session) stream_data // TODO: non-blocking mode n_read, errno := linux.read(session.socket_data.fd, buffer) if errno != .NONE { log.errorf("linux.read failed with", errno) } if session.debug_logging_enabled { log.debug(n_read, buffer[:n_read]) } return i64(n_read), errno != .NONE ? .Unknown : nil } _unix_socket_write :: proc(stream_data: rawptr, mode: io.Stream_Mode, buffer: []u8, offset: i64, whence: io.Seek_From) -> (n: i64, error: io.Error) { assert(mode == .Write) session := cast(^Session) stream_data if session.debug_logging_enabled { log.debug(len(buffer), buffer) } n_written, errno := linux.write(session.socket_data.fd, buffer) if errno != .NONE { log.errorf("linux.write failed with", errno) } return i64(n_written), errno != .NONE ? .Unknown : nil }