Expand description
Goroutine-aware TCP networking (Step 5: netpoll integration).
See net::TcpListener and net::TcpStream.
Note: The networking module currently requires a Unix platform (epoll/kqueue). On Windows it is not compiled. Goroutine-aware TCP networking.
TcpListener and TcpStream wrap non-blocking OS sockets and integrate
with the go-lib scheduler via the netpoll backend (epoll on Linux,
kqueue on macOS). When a socket operation would block (EAGAIN /
EWOULDBLOCK), the goroutine is parked via gopark and re-enqueued by
the netpoll machinery when the socket becomes ready.
§Usage
go_lib::run(|| {
let listener = go_lib::net::TcpListener::bind("127.0.0.1:8080").unwrap();
loop {
let mut stream = listener.accept().unwrap();
go_lib::go!(move || {
let mut buf = [0u8; 1024];
let n = stream.read(&mut buf).unwrap();
stream.write(&buf[..n]).unwrap();
});
}
});§Porting note
Go’s net package calls runtime.poll.pollDesc.waitRead / waitWrite
which translate directly to netpoll_arm(fd, POLL_READ/WRITE, gp) +
gopark. The same protocol is used here.
Structs§
- TcpListener
- A goroutine-aware TCP server socket.
- TcpStream
- A goroutine-aware TCP stream socket.