| Age | Commit message (Collapse) | Author |
|
`HostName.expand` was including the null terminator in the slice passed to `HostName.init`, which caused `HostName.validate` to fail.
|
|
Previously if a Group.wait was canceled, then a subsequent call to
wait() or cancel() would trip an assertion in the synchronization code.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Must free other succeeded connections that lost the race.
|
|
The previous implementation would eagerly attempt TCP connection upon
receiving a DNS reply, but it would still wait for all the DNS results
before returning from the function.
This implementation returns immediately upon first successful TCP
connection, canceling not only in-flight TCP connection attempts but
also unfinished DNS queries.
|
|
and finish implementation of HostName.connect
|
|
Unfortunately this can't be implemented "above the vtable" because
various operating systems don't provide low level DNS resolution
primitives such as just putting the list of nameservers in a file.
Without libc on Linux it works great though!
Anyway this also changes the API to be based on Io.Queue. By using a
large enough buffer, reusable code can be written that does not require
concurrent, yet takes advantage of responding to DNS queries as they
come in. I sketched out a new implementation of `HostName.connect` to
demonstrate this, but it will require an additional API (`Io.Select`) to
be implemented in a future commit.
This commit also introduces "uncancelable" variants for mutex locking,
waiting on a condition, and putting items into a queue.
|
|
* merge conflict with changing behavior of takeDelimiterExclusive
* check bounds before adding to result array
|
|
this feels better
|
|
got the build runner compiling
|
|
|
|
|
|
|
|
|
|
|
|
this lowers to sendmmsg on linux, and means Io.Group is no longer
needed, resulting in a more efficient implementation.
|
|
|
|
|
|
the next task is now implementing Io.Group
|
|
|
|
|
|
/etc/resolv.conf might have IPv6 addresses with scope in it, so this is
needed.
|
|
extract pure functional logic into pure functions and then layer the
scope crap on top properly
the formatting code incorrectly didn't do the reverse operation
(if_indextoname). fix that with some TODO panics
|
|
|
|
|