http: handle and print socket errors
parent
4f4ac45670
commit
a5ccc4673b
|
@ -3855,6 +3855,7 @@ fn (p mut Parser) assert_statement() {
|
|||
if (!$tmp) {
|
||||
println(tos2((byte *)"\\x1B[31mFAILED: $p.cur_fn.name() in $filename:$p.scanner.line_nr\\x1B[0m"));
|
||||
g_test_fails++;
|
||||
return;
|
||||
// TODO
|
||||
// Maybe print all vars in a test function if it fails?
|
||||
} else {
|
||||
|
|
|
@ -32,7 +32,7 @@ fn init() int {
|
|||
return 1
|
||||
}
|
||||
|
||||
fn (req &Request) ssl_do(port int, method, host_name, path string) Response {
|
||||
fn (req &Request) ssl_do(port int, method, host_name, path string) ?Response {
|
||||
//ssl_method := C.SSLv23_method()
|
||||
ssl_method := C.TLSv1_2_method()
|
||||
if isnil(method) {
|
||||
|
|
|
@ -16,7 +16,7 @@ fn C.new_tls_context() C.TlsContext
|
|||
|
||||
fn init() int { return 1 }
|
||||
|
||||
fn (req &Request) ssl_do(port int, method, host_name, path string) Response {
|
||||
fn (req &Request) ssl_do(port int, method, host_name, path string) ?Response {
|
||||
mut ctx := C.new_tls_context()
|
||||
C.vschannel_init(&ctx)
|
||||
|
||||
|
|
|
@ -39,14 +39,20 @@ pub fn get(url string) ?Response {
|
|||
req := new_request('GET', url, '') or {
|
||||
return error(err)
|
||||
}
|
||||
return req.do()
|
||||
res := req.do() or {
|
||||
return error(err)
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
pub fn post(url, data string) ?Response {
|
||||
req := new_request('POST', url, data) or {
|
||||
return error(err)
|
||||
}
|
||||
return req.do()
|
||||
res := req.do() or {
|
||||
return error(err)
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
pub fn new_request(typ, _url, _data string) ?Request {
|
||||
|
@ -151,10 +157,16 @@ fn (req &Request) method_and_url_to_response(method string, url net_dot_urllib.U
|
|||
//println('fetch $method, $scheme, $host_name, $nport, $path ')
|
||||
if scheme == 'https' {
|
||||
//println('ssl_do( $nport, $method, $host_name, $path )')
|
||||
return req.ssl_do( nport, method, host_name, path )
|
||||
res := req.ssl_do( nport, method, host_name, path ) or {
|
||||
return error(err)
|
||||
}
|
||||
return res
|
||||
} else if scheme == 'http' {
|
||||
//println('http_do( $nport, $method, $host_name, $path )')
|
||||
return req.http_do(nport, method, host_name, path )
|
||||
res := req.http_do(nport, method, host_name, path ) or {
|
||||
return error(err)
|
||||
}
|
||||
return res
|
||||
}
|
||||
return error('http.request.do: unsupported scheme: $scheme')
|
||||
}
|
||||
|
|
|
@ -4,5 +4,10 @@ module net
|
|||
#include <unistd.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netdb.h>
|
||||
#include <errno.h>
|
||||
|
||||
fn init() int { return 1 }
|
||||
|
||||
fn error_code() int {
|
||||
return C.errno
|
||||
}
|
||||
|
|
|
@ -29,3 +29,7 @@ fn init() int {
|
|||
return 1
|
||||
}
|
||||
|
||||
fn error_code() int {
|
||||
return C.WSAGetLastError()
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
module net
|
||||
|
||||
import os
|
||||
|
||||
struct Socket {
|
||||
pub:
|
||||
sockfd int
|
||||
|
@ -162,11 +164,13 @@ pub fn (s Socket) connect(address string, port int) ?int {
|
|||
sport := '$port'
|
||||
info_res := C.getaddrinfo(address.str, sport.str, &hints, &info)
|
||||
if info_res != 0 {
|
||||
return error('socket: connect failed')
|
||||
error_message := os.get_error_msg(net.error_code())
|
||||
return error('socket: getaddrinfo failed ($error_message)')
|
||||
}
|
||||
res := int(C.connect(s.sockfd, info.ai_addr, info.ai_addrlen))
|
||||
if res < 0 {
|
||||
return error('socket: connect failed')
|
||||
error_message := os.get_error_msg(net.error_code())
|
||||
return error('socket: connect failed ($error_message)')
|
||||
}
|
||||
return int(res)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue