aboutsummaryrefslogtreecommitdiff
path: root/pfinet/linux-src/net/ipv4/tcp_output.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2015-01-03 17:44:01 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2015-01-03 17:44:01 +0100
commit87fad50310f2bd0dcc990e80e23b09768918cf5b (patch)
tree68550f66228a82a37f6efdbb02ae864fd15cbc07 /pfinet/linux-src/net/ipv4/tcp_output.c
parent29a30c44bb8cecb341df211bcb3b330f515c9003 (diff)
downloadhurd-87fad50310f2bd0dcc990e80e23b09768918cf5b.tar.gz
hurd-87fad50310f2bd0dcc990e80e23b09768918cf5b.tar.bz2
hurd-87fad50310f2bd0dcc990e80e23b09768918cf5b.zip
Backport Linux changes for proper TCP EOF handling
Notably when remote eagerly sends a RST: we want to return EOF to the application, not EPIPE. * pfinet/linux-src/net/ipv4/tcp_output.c (tcp_connect): Set sk->done to 0. * pfinet/linux-src/net/ipv4/tcp_input.c (tcp_fin): Set RCV_SHUTDOWN, and sk->done to 1. * pfinet/linux-src/net/ipv4/tcp.c (tcp_recv_urg): Only return ENOTCONN when we never actually connect. Always return 0 when reception is closed. (tcp_recvmsg): When any data is available, ignore errors and EOF. When no data is available, first check for reception being closed, then for errors.
Diffstat (limited to 'pfinet/linux-src/net/ipv4/tcp_output.c')
-rw-r--r--pfinet/linux-src/net/ipv4/tcp_output.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/pfinet/linux-src/net/ipv4/tcp_output.c b/pfinet/linux-src/net/ipv4/tcp_output.c
index 9ea4b7ad..a15b7b30 100644
--- a/pfinet/linux-src/net/ipv4/tcp_output.c
+++ b/pfinet/linux-src/net/ipv4/tcp_output.c
@@ -922,6 +922,7 @@ void tcp_connect(struct sock *sk, struct sk_buff *buff, int mtu)
tp->rcv_nxt = 0;
sk->err = 0;
+ sk->done = 0;
/* We'll fix this up when we get a response from the other end.
* See tcp_input.c:tcp_rcv_state_process case TCP_SYN_SENT.