Hi,
I've been trying to land runtime-integrated network pollster stuff for
BSD variants and submitted preliminary CLs last week. Looks like all
builders have been doing so-so during the past week (even if we saw
several red alerts, almost unrelated to networking stuff except
existing fragile test case issues or undiscovered runtime-network
combo issues), so I'd like to proceed this work as the following;
1. Rearranging the call order of network pollster and syscall functions
The reason why the existing combination of network file
descriptor+runtime-integrated network pollster doesn't work well on
BSD variants is that the call order of raw networking primitives is
not good for some platforms; specifically, unlike Darwin's kqueue and
package own one-shot I/O event bounce network pollster, BSD's kqueue
with runtime-integrated network pollster requires a socket that has
been passed for syscall.Listen previously for a passive stream
connection listener to pull up pending incoming connections from the
kernel.
CL 12730043 will take care of this, and update issue 5199.
https://codereview.appspot.com/12730043/
2. Switching network pollster from package own to runtime's
CL 8264043 which now includes CL 12730043 for convenience, will take
care of this, less I/O event bounce will make a bit performance
improvement on FreeBSD and OpenBSD, and fixes issue 5199.
https://codereview.appspot.com/8264043/
Port stuff to FreeBSD/ARM, NetBSD/AMD64,386 still remains (issue
6146); actually waiting for minux.
Once we've done, we will see four network pollsters in Go 1.2.
- runtime-integrated network pollster on top of epoll for Linux
available in Go 1.1
- runtime-integrated network pollster on top of I/O completion mech.
for Windows available from Go 1.2
- runtime-integrated network pollster on top of kqueue for Darwin
available in Go 1.1, FreeBSD/AMD64,386 and OpenBSD available from Go
1.2
- net package own pollster on top of kqueue for FreeBSD/ARM and NetBSD
available in Go 1.1
Thanks.