1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

net: ipv6 support, merge unix+ip;[pack:x] attribute (#9904)

This commit is contained in:
Emily Hudson
2021-06-13 21:53:38 +01:00
committed by GitHub
parent fa9fa77a5f
commit 535dcac8fa
52 changed files with 1277 additions and 524 deletions

View File

@@ -7,6 +7,10 @@ fn main() {
defer {
conn.close() or {}
}
println(' peer: $conn.peer_addr()')
println('local: $conn.addr()')
// Simple http HEAD request for a file
conn.write_string('HEAD /index.html HTTP/1.0\r\n\r\n') ?
// Read all the data that is waiting

24
examples/net_resolve.v Normal file
View File

@@ -0,0 +1,24 @@
import net
for addr in [
'vlang.io:80',
'google.com:80',
'steampowered.com:80',
'api.steampowered.com:80',
] {
println('$addr')
for @type in [net.SocketType.tcp, .udp] {
family := net.AddrFamily.unspec
addrs := net.resolve_addrs(addr, family, @type) or {
println('> None')
continue
}
for a in addrs {
f := a.family()
println('> $a $f ${@type}')
}
}
}

View File

@@ -12,7 +12,7 @@ fn main() {
mut buf := []byte{len: 100}
if is_server {
println('UDP echo server, listening for udp packets on port: $port')
mut c := net.listen_udp(port) ?
mut c := net.listen_udp(':$port') ?
for {
read, addr := c.read(mut buf) or { continue }
println('received $read bytes from $addr')
@@ -23,7 +23,7 @@ fn main() {
}
} else {
println('UDP client, sending packets to port: ${port}.\nType `exit` to exit.')
mut c := net.dial_udp('localhost', 'localhost:$port') ?
mut c := net.dial_udp('localhost:$port') ?
for {
mut line := os.input('client > ')
match line {

View File

@@ -0,0 +1,40 @@
import io
import net
// This file shows how a basic TCP echo server can be implemented using
// the net module. You can connect to the server by using netcat or telnet,
// in separate shells, for example:
// nc 127.0.0.1 12345
// or
// telnet 127.0.0.1 12345
fn main() {
mut server := net.listen_tcp(.ip6, ':12345') ?
laddr := server.addr() ?
eprintln('Listen on $laddr ...')
for {
mut socket := server.accept() ?
go handle_client(mut socket)
}
}
fn handle_client(mut socket net.TcpConn) {
defer {
socket.close() or { panic(err) }
}
client_addr := socket.peer_addr() or { return }
eprintln('> new client: $client_addr')
mut reader := io.new_buffered_reader(reader: socket)
defer {
reader.free()
}
socket.write_string('server: hello\n') or { return }
for {
received_line := reader.read_line() or { return }
if received_line == '' {
return
}
println('client $client_addr: $received_line')
socket.write_string('server: $received_line\n') or { return }
}
}

View File

@@ -10,7 +10,7 @@ fn main() {
}
fn start_server() ? {
mut s := websocket.new_server(30000, '')
mut s := websocket.new_server(.ip6, 30000, '')
// Make that in execution test time give time to execute at least one time
s.ping_interval = 100
s.on_connect(fn (mut s websocket.ServerClient) ?bool {

View File

@@ -13,7 +13,7 @@ fn main() {
}
fn start_server() ? {
mut s := websocket.new_server(30000, '')
mut s := websocket.new_server(.ip6, 30000, '')
// Make that in execution test time give time to execute at least one time
s.ping_interval = 100
s.on_connect(fn (mut s websocket.ServerClient) ?bool {