v / vlib / net
Raw file | 72 loc (65 sloc) | 2.23 KB | Latest commit hash 017ace6ea
1module net
2
3// Well defined errors that are returned from socket functions
4pub const (
5 errors_base = 0
6 err_new_socket_failed = error_with_code('net: new_socket failed to create socket',
7 errors_base + 1)
8 err_option_not_settable = error_with_code('net: set_option_xxx option not settable',
9 errors_base + 2)
10 err_option_wrong_type = error_with_code('net: set_option_xxx option wrong type',
11 errors_base + 3)
12 err_port_out_of_range = error_with_code('net: port out of range', errors_base + 5)
13 err_no_udp_remote = error_with_code('net: no udp remote', errors_base + 6)
14 err_connect_failed = error_with_code('net: connect failed', errors_base + 7)
15 err_connect_timed_out = error_with_code('net: connect timed out', errors_base + 8)
16 err_timed_out = error_with_code('net: op timed out', errors_base + 9)
17 err_timed_out_code = errors_base + 9
18 err_connection_refused = error_with_code('net: connection refused', errors_base + 10)
19)
20
21pub fn socket_error_message(potential_code int, s string) !int {
22 return socket_error(potential_code) or { return error('${err.msg()}; ${s}') }
23}
24
25pub fn socket_error(potential_code int) !int {
26 $if windows {
27 if potential_code < 0 {
28 last_error_int := C.WSAGetLastError()
29 last_error := wsa_error(last_error_int)
30 return error_with_code('net: socket error: (${last_error_int}) ${last_error}',
31 int(last_error))
32 }
33 } $else {
34 if potential_code < 0 {
35 last_error := error_code()
36 return error_with_code('net: socket error: ${last_error}', last_error)
37 }
38 }
39
40 return potential_code
41}
42
43pub fn wrap_error(error_code int) ! {
44 if error_code == 0 {
45 return
46 }
47 $if windows {
48 enum_error := wsa_error(error_code)
49 return error_with_code('net: socket error: ${enum_error}', error_code)
50 } $else {
51 return error_with_code('net: socket error: ${error_code}', error_code)
52 }
53}
54
55// wrap_read_result takes a read result and sees if it is 0 for graceful
56// connection termination and returns none
57// e.g. res := wrap_read_result(C.recv(c.sock.handle, voidptr(buf_ptr), len, 0))?
58[inline]
59fn wrap_read_result(result int) !int {
60 if result == 0 {
61 return error('none')
62 }
63 return result
64}
65
66[inline]
67fn wrap_write_result(result int) !int {
68 if result == 0 {
69 return error('none')
70 }
71 return result
72}