net: support `-d net_blocking_sockets` (workaround a sporadic vex failure)
parent
6f50157abc
commit
a832bb609a
|
@ -298,17 +298,19 @@ fn new_tcp_socket() ?TcpSocket {
|
|||
mut s := TcpSocket{
|
||||
handle: sockfd
|
||||
}
|
||||
// s.set_option_bool(.reuse_addr, true)?
|
||||
s.set_option_int(.reuse_addr, 1) ?
|
||||
$if windows {
|
||||
t := u32(1) // true
|
||||
socket_error(C.ioctlsocket(sockfd, fionbio, &t)) ?
|
||||
} $else {
|
||||
socket_error(C.fcntl(sockfd, C.F_SETFL, C.fcntl(sockfd, C.F_GETFL) | C.O_NONBLOCK)) ?
|
||||
}
|
||||
$if trace_tcp ? {
|
||||
eprintln(' new_tcp_socket | s.handle: ${s.handle:6}')
|
||||
}
|
||||
// s.set_option_bool(.reuse_addr, true)?
|
||||
s.set_option_int(.reuse_addr, 1) ?
|
||||
$if !net_blocking_sockets ? {
|
||||
$if windows {
|
||||
t := u32(1) // true
|
||||
socket_error(C.ioctlsocket(sockfd, fionbio, &t)) ?
|
||||
} $else {
|
||||
socket_error(C.fcntl(sockfd, C.F_SETFL, C.fcntl(sockfd, C.F_GETFL) | C.O_NONBLOCK)) ?
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
|
@ -316,17 +318,19 @@ fn tcp_socket_from_handle(sockfd int) ?TcpSocket {
|
|||
mut s := TcpSocket{
|
||||
handle: sockfd
|
||||
}
|
||||
// s.set_option_bool(.reuse_addr, true)?
|
||||
s.set_option_int(.reuse_addr, 1) ?
|
||||
$if windows {
|
||||
t := u32(1) // true
|
||||
socket_error(C.ioctlsocket(sockfd, fionbio, &t)) ?
|
||||
} $else {
|
||||
socket_error(C.fcntl(sockfd, C.F_SETFL, C.fcntl(sockfd, C.F_GETFL) | C.O_NONBLOCK)) ?
|
||||
}
|
||||
$if trace_tcp ? {
|
||||
eprintln(' tcp_socket_from_handle | s.handle: ${s.handle:6}')
|
||||
}
|
||||
// s.set_option_bool(.reuse_addr, true)?
|
||||
s.set_option_int(.reuse_addr, 1) ?
|
||||
$if !net_blocking_sockets ? {
|
||||
$if windows {
|
||||
t := u32(1) // true
|
||||
socket_error(C.ioctlsocket(sockfd, fionbio, &t)) ?
|
||||
} $else {
|
||||
socket_error(C.fcntl(sockfd, C.F_SETFL, C.fcntl(sockfd, C.F_GETFL) | C.O_NONBLOCK)) ?
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
|
|
|
@ -185,11 +185,13 @@ fn new_udp_socket(local_port int) ?&UdpSocket {
|
|||
handle: sockfd
|
||||
}
|
||||
s.set_option_bool(.reuse_addr, true) ?
|
||||
$if windows {
|
||||
t := u32(1) // true
|
||||
socket_error(C.ioctlsocket(sockfd, fionbio, &t)) ?
|
||||
} $else {
|
||||
socket_error(C.fcntl(sockfd, C.F_SETFD, C.O_NONBLOCK)) ?
|
||||
$if !net_blocking_sockets ? {
|
||||
$if windows {
|
||||
t := u32(1) // true
|
||||
socket_error(C.ioctlsocket(sockfd, fionbio, &t)) ?
|
||||
} $else {
|
||||
socket_error(C.fcntl(sockfd, C.F_SETFD, C.O_NONBLOCK)) ?
|
||||
}
|
||||
}
|
||||
// In UDP we always have to bind to a port
|
||||
validate_port(local_port) ?
|
||||
|
|
Loading…
Reference in New Issue