mirror of
https://github.com/nginx/nginx.git
synced 2025-06-07 09:42:39 +08:00
use CMSG_LEN(), this fixes an alert "sendmsg() failed (9: Bad file descriptor)"
on some 64-bit platforms
This commit is contained in:
parent
bb7c84159f
commit
09248b7a55
@ -33,7 +33,7 @@ ngx_write_channel(ngx_socket_t s, ngx_channel_t *ch, size_t size,
|
||||
msg.msg_control = (caddr_t) &cmsg;
|
||||
msg.msg_controllen = sizeof(cmsg);
|
||||
|
||||
cmsg.cm.cmsg_len = sizeof(cmsg);
|
||||
cmsg.cm.cmsg_len = CMSG_LEN(sizeof(int));
|
||||
cmsg.cm.cmsg_level = SOL_SOCKET;
|
||||
cmsg.cm.cmsg_type = SCM_RIGHTS;
|
||||
*(int *) CMSG_DATA(&cmsg.cm) = ch->fd;
|
||||
@ -138,7 +138,7 @@ ngx_read_channel(ngx_socket_t s, ngx_channel_t *ch, size_t size, ngx_log_t *log)
|
||||
|
||||
if (ch->command == NGX_CMD_OPEN_CHANNEL) {
|
||||
|
||||
if (cmsg.cm.cmsg_len < (socklen_t) sizeof(cmsg)) {
|
||||
if (cmsg.cm.cmsg_len < (socklen_t) CMSG_LEN(sizeof(int))) {
|
||||
ngx_log_error(NGX_LOG_ALERT, log, 0,
|
||||
"recvmsg() returned too small ancillary data");
|
||||
return NGX_ERROR;
|
||||
|
@ -48,11 +48,16 @@
|
||||
|
||||
#if __FreeBSD_version < 400017
|
||||
|
||||
/* FreeBSD 3.x has no CMSG_SPACE() at all and has the broken CMSG_DATA() */
|
||||
/*
|
||||
* FreeBSD 3.x has no CMSG_SPACE() and CMSG_LEN() and has the broken CMSG_DATA()
|
||||
*/
|
||||
|
||||
#undef CMSG_SPACE
|
||||
#define CMSG_SPACE(l) (ALIGN(sizeof(struct cmsghdr)) + ALIGN(l))
|
||||
|
||||
#undef CMSG_LEN
|
||||
#define CMSG_LEN(l) (ALIGN(sizeof(struct cmsghdr)) + (l))
|
||||
|
||||
#undef CMSG_DATA
|
||||
#define CMSG_DATA(cmsg) ((u_char *)(cmsg) + ALIGN(sizeof(struct cmsghdr)))
|
||||
|
||||
|
@ -110,11 +110,16 @@
|
||||
|
||||
#include <sys/param.h> /* ALIGN() */
|
||||
|
||||
/* FreeBSD 3.x has no CMSG_SPACE() at all and has the broken CMSG_DATA() */
|
||||
/*
|
||||
* FreeBSD 3.x has no CMSG_SPACE() and CMSG_LEN() and has the broken CMSG_DATA()
|
||||
*/
|
||||
|
||||
#undef CMSG_SPACE
|
||||
#define CMSG_SPACE(l) (ALIGN(sizeof(struct cmsghdr)) + ALIGN(l))
|
||||
|
||||
#undef CMSG_LEN
|
||||
#define CMSG_LEN(l) (ALIGN(sizeof(struct cmsghdr)) + (l))
|
||||
|
||||
#undef CMSG_DATA
|
||||
#define CMSG_DATA(cmsg) ((u_char *)(cmsg) + ALIGN(sizeof(struct cmsghdr)))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user