Compare commits

..

2 Commits

Author SHA1 Message Date
ge 26a422d5ed upd17 2026-05-01 22:08:51 +03:00
ge 416d45a1de upd16 2026-05-01 21:23:28 +03:00
3 changed files with 45 additions and 41 deletions
BIN
View File
Binary file not shown.
+13 -8
View File
@@ -1,5 +1,16 @@
import netio
// This program starts a server that listens for TCP connections on port 1081.
// The program listens on all addresses available in the operating system,
// including IPv4 and IPv6.
//
// Run the program and try connecting using the telnet utility:
//
// telnet 127.0.0.1 1081 # IPv4
// telnet ::1 1081 # IPv6
//
// This program fails if operation system does not support IPv6 or IPv6 is disabled.
fn main() {
// We want to bind a server socket to the all available local addresses,
// (both IPv4 and IPv6) so collect the address info entries for it.
@@ -58,6 +69,7 @@ fn main() {
println('Listening on ${listen_addr}...')
for {
// Accept the connection from remote. This is a blocking call.
// conn will store the new socket connected to the remote.
conn, remote_addr := socket.accept() or {
@@ -75,7 +87,7 @@ fn main() {
flags: netio.ni_numerichost | netio.ni_numericserv
)!
eprintln('Accpeted connection. Remote address: ${remote_host}, remote port: ${remote_port}')
eprintln('Accepted connection. Remote address: ${remote_host}, remote port: ${remote_port}')
// Read 512 bytes of data from socket.
mut buf := []u8{len: 512} // Initialize the buffer to store message.
@@ -89,12 +101,5 @@ fn main() {
msg := unsafe { tos_clone(buf.data) }
eprintln('Received from client: ${read} bytes, data: ${msg}')
// Send reply to the client.
sent := conn.send(msg.bytes(), 0) or {
eprintln('SEND: ${err}')
exit(1)
}
eprintln('Sent to the client: ${sent} bytes, data: ${msg}')
}
+2 -3
View File
@@ -39,7 +39,6 @@ pub fn Socket.new(domain AddrFamily, st SocketType, proto Protocol) !Socket {
// type reports the actual socket type.
pub fn (s Socket) type() !SocketType {
// return s.get_option_int(sol_socket, so_type)!
return s.get_option[SocketType](sol_socket, so_type)!
}
@@ -113,8 +112,8 @@ fn (s Socket) get_option_raw(level SocketLevel, option SocketOption, mut value v
// ```v
// import netio
// mut socket := netio.Socket.new(netio.af_inet, netio.sock_stream, 0)!
// socket.set_option(netio.sol_socket, netio.so_reuseaddr, true)!
// assert socket.get_option[bool](netio.sol_socket, netio.so_reuseaddr)! == true
// socket.set_option(netio.sol_socket, netio.so_reuseaddr, 1)!
// assert socket.get_option[int](netio.sol_socket, netio.so_reuseaddr)! == true
// ```
pub fn (s Socket) get_option[T](level SocketLevel, option SocketOption) !T {
mut result := T{}