restart recvmsg() if returning with errno==EINTR.
Fixes a crash on server reset on some machines. Code inspired by ssh, with feedback from guenther@ and millert@ ok guenther@ miod@
This commit is contained in:
parent
805ddd83d6
commit
3870417379
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: privsep.c,v 1.16 2010/12/22 21:36:05 matthieu Exp $ */
|
||||
/* $OpenBSD: privsep.c,v 1.17 2011/01/28 19:37:55 matthieu Exp $ */
|
||||
/*
|
||||
* Copyright 2001 Niels Provos <provos@citi.umich.edu>
|
||||
* All rights reserved.
|
||||
@ -198,8 +198,10 @@ receive_fd(int socket)
|
||||
msg.msg_control = &cmsgbuf.buf;
|
||||
msg.msg_controllen = sizeof(cmsgbuf.buf);
|
||||
|
||||
if ((n = recvmsg(socket, &msg, 0)) == -1)
|
||||
warn("%s: recvmsg", __func__);
|
||||
do
|
||||
n = recvmsg(socket, &msg, 0);
|
||||
while (n == -1 && errno == EINTR);
|
||||
|
||||
if (n != sizeof(int))
|
||||
warnx("%s: recvmsg: expected received 1 got %ld",
|
||||
__func__, (long)n);
|
||||
|
Loading…
Reference in New Issue
Block a user