Module Name: src Committed By: hannken Date: Wed Nov 7 09:58:19 UTC 2018
Modified Files: src/sys/kern: uipc_socket.c Log Message: Update getsockopt(SO_ERROR) to behave like soreceive() and return and clear so->so_rerror if so->so_error is zero. Ok: christos@ To generate a diff of this commit: cvs rdiff -u -r1.266 -r1.267 src/sys/kern/uipc_socket.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/uipc_socket.c diff -u src/sys/kern/uipc_socket.c:1.266 src/sys/kern/uipc_socket.c:1.267 --- src/sys/kern/uipc_socket.c:1.266 Sun Nov 4 16:30:29 2018 +++ src/sys/kern/uipc_socket.c Wed Nov 7 09:58:19 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_socket.c,v 1.266 2018/11/04 16:30:29 christos Exp $ */ +/* $NetBSD: uipc_socket.c,v 1.267 2018/11/07 09:58:19 hannken Exp $ */ /*- * Copyright (c) 2002, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.266 2018/11/04 16:30:29 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.267 2018/11/07 09:58:19 hannken Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -1974,6 +1974,10 @@ sogetopt1(struct socket *so, struct sock break; case SO_ERROR: + if (so->so_error == 0) { + so->so_error = so->so_rerror; + so->so_rerror = 0; + } error = sockopt_setint(sopt, so->so_error); so->so_error = 0; break;