Mercurial > dovecot > original-hg > dovecot-1.2
changeset 910:e757c5fab691 HEAD
fd_read() fixes, hopefully works better now.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 06 Jan 2003 13:34:40 +0200 |
parents | 9d1076e7c090 |
children | 7f92d2100795 |
files | src/lib/fdpass.c |
diffstat | 1 files changed, 8 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/fdpass.c Mon Jan 06 13:20:28 2003 +0200 +++ b/src/lib/fdpass.c Mon Jan 06 13:34:40 2003 +0200 @@ -97,16 +97,17 @@ msg.msg_iovlen = 1; msg.msg_control = buf; - msg.msg_controllen = CMSG_LEN(sizeof(int)); - - cmsg = CMSG_FIRSTHDR(&msg); - cmsg->cmsg_level = SOL_SOCKET; - cmsg->cmsg_type = SCM_RIGHTS; + msg.msg_controllen = sizeof(buf); ret = recvmsg(handle, &msg, 0); - if (msg.msg_controllen != CMSG_LEN(sizeof(int))) + if (ret <= 0) + return ret; + + /* at least one byte transferred - we should have the fd now */ + cmsg = CMSG_FIRSTHDR(&msg); + if (cmsg == NULL) *fd = -1; else - *fd = *(int *) CMSG_DATA(cmsg); + *fd = *((int *) CMSG_DATA(cmsg)); return ret; }