write_index += to_write;
start += to_write;
- reader_read_next_chunk(reader);
+ if n > 0 {
+ reader_read_next_chunk(reader);
+ }
}
last_byte = cast(i32) bytes[write_index - 1];
ipv4_to_str :: (addr: u32) -> str {
#persist out: [64] u8;
str_addr := conv.format(out, "{}.{}.{}.{}",
- (addr >> 24) & 0xff,
+ (addr >> 0) & 0xff,
+ (addr >> 8) & 0xff,
(addr >> 16) & 0xff,
- (addr >> 8) & 0xff,
- (addr >> 0) & 0xff);
+ (addr >> 24) & 0xff);
return str_addr;
}
tcp_server_listen :: (use server: &TCP_Server, port: u16) -> bool {
sa: SocketAddress;
make_ipv4_address(&sa, 0x00000000, port);
- if !(socket->bind(&sa)) do return false;
+ if !socket->bind(&sa) do return false;
socket->listen();
socket->option(.NonBlocking, true);
return __net_bind_unix(s, ~~path);
}
+ case ipv4: .Inet {
+ return __net_bind_ipv4(s, ipv4.addr, ipv4.port);
+ }
+
case host: .HostPort {
return __net_bind_host(s, host.host, host.port);
}
__net_connect_host :: (handle: SocketData, host: str, port: u16) -> SocketError ---
__net_bind_unix :: (handle: SocketData, path: cstr) -> bool ---
+ __net_bind_ipv4 :: (handle: SocketData, addr: u32, port: u16) -> bool ---
__net_bind_host :: (handle: SocketData, host: str, port: u16) -> bool ---
__net_accept :: (handle: SocketData, out_buf: rawptr, out_len: &i32) -> SocketData ---
ONYX_FUNC(__net_close_socket)
ONYX_FUNC(__net_setting_flag)
ONYX_FUNC(__net_bind_unix)
+ ONYX_FUNC(__net_bind_ipv4)
ONYX_FUNC(__net_bind_host)
ONYX_FUNC(__net_listen)
ONYX_FUNC(__net_accept)
return NULL;
}
+ONYX_DEF(__net_bind_ipv4, (WASM_I32, WASM_I32, WASM_I32), (WASM_I32)) {
+ struct sockaddr_in bind_addr;
+ memset(&bind_addr, 0, sizeof(bind_addr));
+
+ bind_addr.sin_family = AF_INET;
+ bind_addr.sin_addr.s_addr = params->data[1].of.i32;
+ bind_addr.sin_port = htons(params->data[2].of.i32);
+
+ if (bind(params->data[0].of.i32, &bind_addr, sizeof(bind_addr)) >= 0) {
+ results->data[0] = WASM_I32_VAL(1);
+ } else {
+ results->data[0] = WASM_I32_VAL(0);
+ }
+
+ return NULL;
+}
+
+
ONYX_DEF(__net_bind_host, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), (WASM_I32)) {
int hostlen = params->data[2].of.i32;
char *hostname = alloca(hostlen + 1);