diff options
author | 1998-02-07 16:33:34 +0000 | |
---|---|---|
committer | 1998-02-07 16:33:34 +0000 | |
commit | 54f8ded4b84b4a011ddb86fc805d7a14ea9cc0c7 (patch) | |
tree | a3f7daea86007fa55d79588121c7b7c385a8e627 | |
parent | o Don't put newlines in syslog() messages and use %m, not strerror() (diff) | |
download | wireguard-openbsd-54f8ded4b84b4a011ddb86fc805d7a14ea9cc0c7.tar.xz wireguard-openbsd-54f8ded4b84b4a011ddb86fc805d7a14ea9cc0c7.zip |
emulate linux connect() braindamage even better -- only do so on async
sockets; pb@fasterix.freenix.org
-rw-r--r-- | sys/compat/linux/linux_socket.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index 43d64c7a8ae..e44dd950242 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -1,4 +1,4 @@ -/* $OpenBSD: linux_socket.c,v 1.9 1997/12/14 20:51:16 deraadt Exp $ */ +/* $OpenBSD: linux_socket.c,v 1.10 1998/02/07 16:33:34 deraadt Exp $ */ /* $NetBSD: linux_socket.c,v 1.14 1996/04/05 00:01:50 christos Exp $ */ /* @@ -204,10 +204,18 @@ linux_connect(p, uap, retval) if (error == EISCONN) { struct sys_getsockopt_args bga; + struct sys_fcntl_args fca; void *status, *statusl; int stat, statl = sizeof stat; caddr_t sg; + SCARG(&fca, fd) = lca.s; + SCARG(&fca, cmd) = F_GETFL; + SCARG(&fca, arg) = 0; + if (sys_getsockopt(p, &fca, retval) == -1 || + (*retval & O_NONBLOCK) == 0) + return error; + sg = stackgap_init(p->p_emul); status = stackgap_alloc(&sg, sizeof stat); statusl = stackgap_alloc(&sg, sizeof statusl); |