commit | 4e5848a5423927b7de36f88fac380a2af3d36799 | [log] [tgz] |
---|---|---|
author | Bhasker Hariharan <bhaskerh@google.com> | Tue Aug 06 10:59:49 2019 -0700 |
committer | gVisor bot <gvisor-bot@google.com> | Tue Aug 06 11:00:32 2019 -0700 |
tree | 86d21a4362e77a5c0c8b315edb2ef2e663f4d704 | |
parent | e9f200df47297a56ddc186771fc066bbd92413b1 [diff] |
Fix for a panic due to writing to a closed accept channel. This can happen because endpoint.Close() closes the accept channel first and then drains/resets any accepted but not delivered connections. But there can be connections that are connected but not delivered to the channel as the channel was full. But closing the channel can cause these writes to fail with a write to a closed channel. The correct solution is to abort any connections in SYN-RCVD state and drain/abort all completed connections before closing the accept channel. PiperOrigin-RevId: 261951132
Netstack is a network stack written in Go.
Try it out on Linux by installing the tun_tcp_echo demo:
go install github.com/google/netstack/tcpip/sample/tun_tcp_echo
Create a TUN device with:
[sudo] ip tuntap add user <username> mode tun <device-name> [sudo] ip link set <device-name> up [sudo] ip addr add <ipv4-address>/<mask-length> dev <device-name>
Then run with:
tun_tcp_echo <device-name> <ipv4-address> <port>
Please see CONTRIBUTING.md for more details.
This is not an official Google product (experimental or otherwise), it is just code that happens to be owned by Google.