ref: e07b71bff44cc81ec103880eea7a49da6cc624d6
parent: 65a4e90cb71cd53f913591ec0102e18358dd0c6b
author: Ori Bernstein <ori@eigenstate.org>
date: Sun Aug 5 12:56:55 EDT 2018
Be less obnoxious about error handling.
--- a/irc.myr
+++ b/irc.myr
@@ -15,7 +15,7 @@
const send : (irc : irc#, srv : server#, fmt : byte[:], args : ... -> bool)
const status : (irc : irc#, chan : chan#, fmt : byte[:], args : ... -> void)
const chancycle : (irc : irc#, delta : std.size -> void)
- const handshake : (irc : irc#, srv : server# -> bool)
+ const handshake : (irc : irc#, srv : server# -> void)
const message : (irc : irc#, ln : byte[:] -> void)
const cmd : (irc : irc#, ln : byte[:] -> void)
const getstr : (chars : char[:] -> byte[:])
@@ -412,19 +412,14 @@
match std.dial(ds)
| `std.Ok fd:
srv = mksrv(irc, fd, ds)
- if handshake(irc, srv)
- srv.id = irc.srv.len
- std.slpush(&irc.srv, srv)
- if irc.focus == -1
- irc.focus = irc.srv.len - 1
- srv.death = 0
- ;;
- status(irc, irc.self, "connected to {}", ds)- else
- status(irc, irc.self, "could not handshake with {j= }", args)- std.close(srv.fd)
- std.free(srv)
+ handshake(irc, srv)
+ srv.id = irc.srv.len
+ std.slpush(&irc.srv, srv)
+ if irc.focus == -1
+ irc.focus = irc.srv.len - 1
+ srv.death = 0
;;
+ status(irc, irc.self, "connected to {}", ds)| `std.Err e:
status(irc, irc.self, "failed to connect: {}", e);;
@@ -453,7 +448,6 @@
const handshake = {irc, srv send(irc, srv, "NICK {}\r\n", srv.nick) send(irc, srv, "USER {} 8 * :{}\r\n", srv.user, srv.user)- -> true
}
const join = {irc, args--- a/main.myr
+++ b/main.myr
@@ -60,13 +60,11 @@
continue
;;
std.close(s.fd)
+ s.fd = -1
match std.dial(s.ds)
| `std.Ok fd:
s.fd = fd
- if !handshake(irc, s)
- std.close(s.fd)
- continue
- ;;
+ handshake(irc, s)
s.death = 0
for c : irc.onconn
do(irc, c)
@@ -78,6 +76,8 @@
std.usleep(200*std.Msec)
;;
| `std.Err e:
+ /* push back our next reconnection attempt */
+ s.death = std.now()
;;
;;
}
@@ -93,6 +93,9 @@
.revents=0,
])
for s : irc.srv
+ if s.fd == -1
+ continue
+ ;;
std.slpush(&pfd, [
.fd=(s.fd : sys.fd),
.events=sys.Pollin,
@@ -104,7 +107,7 @@
start = std.rand(0, pfd.len)
for var j = 0; j != pfd.len; j++
i = (j + start) % pfd.len
- if pfd[i].revents != 0
+ if pfd[i].revents & (sys.Pollin|sys.Pollerr) != 0
fd = (pfd[i].fd : std.fd)
break
;;
--
⑨