net: make listen/bind errors more informative
parent
9cbfa882e6
commit
b778c1d097
|
@ -20,6 +20,10 @@ pub const (
|
|||
err_timed_out_code = errors_base + 9
|
||||
)
|
||||
|
||||
pub fn socket_error_message(potential_code int, s string) ?int {
|
||||
return socket_error(potential_code) or { return error('$err.msg; $s') }
|
||||
}
|
||||
|
||||
pub fn socket_error(potential_code int) ?int {
|
||||
$if windows {
|
||||
if potential_code < 0 {
|
||||
|
|
|
@ -20,11 +20,15 @@ mut:
|
|||
}
|
||||
|
||||
pub fn dial_tcp(address string) ?&TcpConn {
|
||||
addrs := resolve_addrs_fuzzy(address, .tcp) ?
|
||||
addrs := resolve_addrs_fuzzy(address, .tcp) or {
|
||||
return error('$err.msg; could not resolve address $address in dial_tcp')
|
||||
}
|
||||
|
||||
// Very simple dialer
|
||||
for addr in addrs {
|
||||
mut s := new_tcp_socket(addr.family()) ?
|
||||
mut s := new_tcp_socket(addr.family()) or {
|
||||
return error('$err.msg; could not create new tcp socket in dial_tcp')
|
||||
}
|
||||
s.connect(addr) or {
|
||||
// Connection failed
|
||||
s.close() or { continue }
|
||||
|
@ -38,7 +42,7 @@ pub fn dial_tcp(address string) ?&TcpConn {
|
|||
}
|
||||
}
|
||||
// failed
|
||||
return error('dial_tcp failed')
|
||||
return error('dial_tcp failed for address $address')
|
||||
}
|
||||
|
||||
pub fn (mut c TcpConn) close() ? {
|
||||
|
@ -185,7 +189,7 @@ pub fn (c &TcpConn) peer_addr() ?Addr {
|
|||
}
|
||||
}
|
||||
mut size := sizeof(Addr)
|
||||
socket_error(C.getpeername(c.sock.handle, voidptr(&addr), &size)) ?
|
||||
socket_error_message(C.getpeername(c.sock.handle, voidptr(&addr), &size), 'peer_addr failed') ?
|
||||
return addr
|
||||
}
|
||||
|
||||
|
@ -211,18 +215,19 @@ mut:
|
|||
}
|
||||
|
||||
pub fn listen_tcp(family AddrFamily, saddr string) ?&TcpListener {
|
||||
s := new_tcp_socket(family) ?
|
||||
s := new_tcp_socket(family) or { return error('$err.msg; could not create new socket') }
|
||||
|
||||
addrs := resolve_addrs(saddr, family, .tcp) ?
|
||||
addrs := resolve_addrs(saddr, family, .tcp) or {
|
||||
return error('$err.msg; could not resolve address $saddr')
|
||||
}
|
||||
|
||||
// TODO(logic to pick here)
|
||||
addr := addrs[0]
|
||||
|
||||
// cast to the correct type
|
||||
alen := addr.len()
|
||||
bindres := C.bind(s.handle, voidptr(&addr), alen)
|
||||
socket_error(bindres) ?
|
||||
socket_error(C.listen(s.handle, 128)) ?
|
||||
socket_error_message(C.bind(s.handle, voidptr(&addr), alen), 'binding to $saddr failed') ?
|
||||
socket_error_message(C.listen(s.handle, 128), 'listening on $saddr failed') ?
|
||||
return &TcpListener{
|
||||
sock: s
|
||||
accept_deadline: no_deadline
|
||||
|
|
Loading…
Reference in New Issue