2 dnl Copyright (C) 2011 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
7 AC_DEFUN([gl_SOCKET_AFUNIX],
9 AC_REQUIRE([gl_HEADER_SYS_SOCKET])
10 AC_REQUIRE([gl_SOCKET_FAMILY_UNIX])
11 AC_CHECK_FUNCS_ONCE([recvmsg sendmsg])
13 AC_MSG_CHECKING([for UNIX domain sockets SCM_RIGHTS])
14 AC_CACHE_VAL([gl_cv_socket_unix_scm_rights],
17 [[#include <sys/types.h>
18 #ifdef HAVE_SYS_SOCKET_H
19 #include <sys/socket.h>
24 #ifdef HAVE_WINSOCK2_H
29 cmh.cmsg_level = SOL_SOCKET;
30 cmh.cmsg_type = SCM_RIGHTS;
33 [gl_cv_socket_unix_scm_rights=yes],
34 [gl_cv_socket_unix_scm_rights=no])
36 AC_MSG_RESULT([$gl_cv_socket_unix_scm_rights])
37 if test $gl_cv_socket_unix_scm_rights = yes; then
38 AC_DEFINE([HAVE_UNIXSOCKET_SCM_RIGHTS], [1],
39 [Define to 1 if <sys/socket.h> defines SCM_RIGHTS.])
42 dnl Persuade AIX 5.2 <sys/socket.h> to declare CMSG_SPACE, CMSG_LEN.
43 AC_DEFINE([_LINUX_SOURCE_COMPAT], [1],
44 [Define in order to get some macros on AIX systems.])
46 AC_MSG_CHECKING([for UNIX domain sockets SCM_RIGHTS that behave in BSD4.4 way])
47 AC_CACHE_VAL([gl_cv_socket_unix_scm_rights_bsd44_way],
50 [[#include <sys/types.h>
52 #ifdef HAVE_SYS_SOCKET_H
53 #include <sys/socket.h>
58 #ifdef HAVE_WINSOCK2_H
62 [[struct msghdr msg = {0};
65 char buf[CMSG_SPACE (sizeof (myfds))];
67 msg.msg_control = buf;
68 msg.msg_controllen = sizeof buf;
69 cmsg = CMSG_FIRSTHDR (&msg);
70 cmsg->cmsg_level = SOL_SOCKET;
71 cmsg->cmsg_type = SCM_RIGHTS;
72 cmsg->cmsg_len = CMSG_LEN (sizeof (int));
73 /* fake Initialize the payload: */
74 (void) CMSG_DATA (cmsg);
75 /* Sum of the length of all control messages in the buffer: */
76 msg.msg_controllen = cmsg->cmsg_len;
79 [gl_cv_socket_unix_scm_rights_bsd44_way=yes],
80 [gl_cv_socket_unix_scm_rights_bsd44_way=no])
82 AC_MSG_RESULT([$gl_cv_socket_unix_scm_rights_bsd44_way])
83 if test $gl_cv_socket_unix_scm_rights_bsd44_way = yes; then
84 AC_DEFINE([HAVE_UNIXSOCKET_SCM_RIGHTS_BSD44_WAY], [1],
85 [Define to 1 if fd can be sent/received in the BSD4.4 way.])
88 AC_MSG_CHECKING([for UNIX domain sockets SCM_RIGHTS that behave in BSD4.3 way])
89 AC_CACHE_VAL([gl_cv_socket_unix_scm_rights_bsd43_way],
92 [[#include <sys/types.h>
93 #ifdef HAVE_SYS_SOCKET_H
94 #include <sys/socket.h>
99 #ifdef HAVE_WINSOCK2_H
100 #include <winsock2.h>
105 msg.msg_accrights = &fd;
106 msg.msg_accrightslen = sizeof (fd);
109 [gl_cv_socket_unix_scm_rights_bsd43_way=yes],
110 [gl_cv_socket_unix_scm_rights_bsd43_way=no])
112 AC_MSG_RESULT([$gl_cv_socket_unix_scm_rights_bsd43_way])
113 if test $gl_cv_socket_unix_scm_rights_bsd43_way = yes; then
114 AC_DEFINE([HAVE_UNIXSOCKET_SCM_RIGHTS_BSD43_WAY], [1],
115 [Define to 1 if fd can be sent/received in the BSD4.3 way.])