From: Kern Sibbald Date: Fri, 7 Mar 2003 15:47:34 +0000 (+0000) Subject: Fix Solaris 2.6 and setsockopt() X-Git-Tag: Release-1.30~96 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=4d7471b0f1e26c4d91a28a4aaa3e74ec0dd6a67b;p=bacula%2Fbacula Fix Solaris 2.6 and setsockopt() git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@371 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/autoconf/acconfig.h b/bacula/autoconf/acconfig.h index 160594e0dd..11289bcf5e 100644 --- a/bacula/autoconf/acconfig.h +++ b/bacula/autoconf/acconfig.h @@ -20,9 +20,6 @@ /* Define to `int' if doesn't define. */ #undef ssize_t -/* Set if socklen_t is not defined in sys/types.h */ -#undef socklen_t - /* Define if you want to use MySQL */ #undef HAVE_MYSQL @@ -202,5 +199,7 @@ #undef HAVE_INET_PTON #undef HAVE_SOCKLEN_T + +#undef HAVE_OLD_SOCKOPT #undef HAVE_BIGENDIAN diff --git a/bacula/autoconf/config.h.in b/bacula/autoconf/config.h.in index 2e2116d2a8..24f16b37ad 100644 --- a/bacula/autoconf/config.h.in +++ b/bacula/autoconf/config.h.in @@ -21,9 +21,6 @@ /* Define to `int' if doesn't define. */ #undef ssize_t -/* Set if socklen_t is not defined in sys/types.h */ -#undef socklen_t - /* Define if you want to use MySQL */ #undef HAVE_MYSQL @@ -280,6 +277,8 @@ #undef HAVE_SOCKLEN_T +#undef HAVE_OLD_SOCKOPT + #undef HAVE_BIGENDIAN diff --git a/bacula/autoconf/configure.in b/bacula/autoconf/configure.in index 2bcccced3f..9d026cf669 100644 --- a/bacula/autoconf/configure.in +++ b/bacula/autoconf/configure.in @@ -1299,7 +1299,7 @@ slackware) hostname=`hostname -s` ;; solaris) - DISTVER=Solaris + DISTVER=`uname -r` TAPEDRIVE="/dev/rmt/0cbn" PSCMD="ps -e -o pid,comm" PFILES="${PFILES} \ @@ -1307,6 +1307,9 @@ solaris) platforms/solaris/bacula-fd \ platforms/solaris/bacula-sd \ platforms/solaris/bacula-dir" + if test x$DISTVER = x2.6 ; then + AC_DEFINE(HAVE_OLD_SOCKOPT) + fi ;; suse) DISTVER=`cat /etc/SuSE-release |grep VERSION|\ @@ -1344,7 +1347,6 @@ AC_SUBST(WIN32) AC_SUBST(DISTNAME) AC_SUBST(DISTVER) - dnl# common parts of the Makefile MCOMMON=./autoconf/Make.common AC_SUBST_FILE(MCOMMON) diff --git a/bacula/configure b/bacula/configure index bbcf53672d..e85591bdc0 100755 --- a/bacula/configure +++ b/bacula/configure @@ -9433,7 +9433,7 @@ slackware) hostname=`hostname -s` ;; solaris) - DISTVER=Solaris + DISTVER=`uname -r` TAPEDRIVE="/dev/rmt/0cbn" PSCMD="ps -e -o pid,comm" PFILES="${PFILES} \ @@ -9441,6 +9441,12 @@ solaris) platforms/solaris/bacula-fd \ platforms/solaris/bacula-sd \ platforms/solaris/bacula-dir" + if test x$DISTVER = x2.6 ; then + cat >> confdefs.h <<\EOF +#define HAVE_OLD_SOCKOPT 1 +EOF + + fi ;; suse) DISTVER=`cat /etc/SuSE-release |grep VERSION|\ @@ -9484,7 +9490,6 @@ EOF - MCOMMON=./autoconf/Make.common diff --git a/bacula/src/baconfig.h b/bacula/src/baconfig.h index 7bf7bc64bd..3d3bcadc0a 100644 --- a/bacula/src/baconfig.h +++ b/bacula/src/baconfig.h @@ -367,6 +367,7 @@ extern int thr_setconcurrency(int); #else + /* Not needed on most systems */ #define set_thread_concurrency(x) diff --git a/bacula/src/bc_types.h b/bacula/src/bc_types.h index 8454b58727..aa63873720 100644 --- a/bacula/src/bc_types.h +++ b/bacula/src/bc_types.h @@ -184,3 +184,8 @@ typedef float float32_t; #define socklen_t int #endif +#ifdef HAVE_OLD_SOCKOPT +#define sockopt_val_t char * +#else +#define sockopt_val_t void * +#endif diff --git a/bacula/src/lib/bnet.c b/bacula/src/lib/bnet.c index e8ef5c122d..bb0757db91 100644 --- a/bacula/src/lib/bnet.c +++ b/bacula/src/lib/bnet.c @@ -468,7 +468,7 @@ bnet_open(void *jcr, char *name, char *host, char *service, int port) /* * Receive notification when connection dies. */ - if (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &turnon, sizeof(turnon)) < 0) { + if (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (sockopt_val_t)&turnon, sizeof(turnon)) < 0) { Jmsg(jcr, M_WARNING, 0, _("Cannot set SO_KEEPALIVE on socket: %s\n"), strerror(errno)); } @@ -572,7 +572,7 @@ int bnet_set_buffer_size(BSOCK *bs, uint32_t size, int rw) int opt; opt = IPTOS_THROUGHPUT; - setsockopt(bs->fd, IPPROTO_IP, IP_TOS, (char *)&opt, sizeof(opt)); + setsockopt(bs->fd, IPPROTO_IP, IP_TOS, (sockopt_val_t)&opt, sizeof(opt)); #endif dbuf_size = size; @@ -582,7 +582,7 @@ int bnet_set_buffer_size(BSOCK *bs, uint32_t size, int rw) } if (rw & BNET_SETBUF_READ) { while ((dbuf_size > TAPE_BSIZE) && - (setsockopt(bs->fd, SOL_SOCKET, SO_RCVBUF, (char *)&dbuf_size, sizeof(dbuf_size)) < 0)) { + (setsockopt(bs->fd, SOL_SOCKET, SO_RCVBUF, (sockopt_val_t)&dbuf_size, sizeof(dbuf_size)) < 0)) { Jmsg1(bs->jcr, M_ERROR, 0, _("sockopt error: %s\n"), strerror(errno)); dbuf_size -= TAPE_BSIZE; } @@ -597,7 +597,7 @@ int bnet_set_buffer_size(BSOCK *bs, uint32_t size, int rw) dbuf_size = size; if (rw & BNET_SETBUF_WRITE) { while ((dbuf_size > TAPE_BSIZE) && - (setsockopt(bs->fd, SOL_SOCKET, SO_SNDBUF, (char *)&dbuf_size, sizeof(dbuf_size)) < 0)) { + (setsockopt(bs->fd, SOL_SOCKET, SO_SNDBUF, (sockopt_val_t)&dbuf_size, sizeof(dbuf_size)) < 0)) { Jmsg1(bs->jcr, M_ERROR, 0, _("sockopt error: %s\n"), strerror(errno)); dbuf_size -= TAPE_BSIZE; } diff --git a/bacula/src/lib/bnet_server.c b/bacula/src/lib/bnet_server.c index a789fa8d56..16b5e6b513 100644 --- a/bacula/src/lib/bnet_server.c +++ b/bacula/src/lib/bnet_server.c @@ -75,7 +75,7 @@ bnet_thread_server(char *bind_addr, int port, int max_clients, workq_t *client_w /* * Reuse old sockets */ - if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &turnon, sizeof(turnon)) < 0) { + if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (sockopt_val_t)&turnon, sizeof(turnon)) < 0) { Emsg1(M_WARNING, 0, _("Cannot set SO_REUSEADDR on socket: %s\n"), strerror(errno)); } @@ -154,7 +154,7 @@ bnet_thread_server(char *bind_addr, int port, int max_clients, workq_t *client_w /* * Receive notification when connection dies. */ - if (setsockopt(newsockfd, SOL_SOCKET, SO_KEEPALIVE, &turnon, sizeof(turnon)) < 0) { + if (setsockopt(newsockfd, SOL_SOCKET, SO_KEEPALIVE, (sockopt_val_t)&turnon, sizeof(turnon)) < 0) { Emsg1(M_WARNING, 0, _("Cannot set SO_KEEPALIVE on socket: %s\n") , strerror(errno)); } @@ -200,7 +200,7 @@ bnet_bind(int port) /* * Reuse old sockets */ - if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &turnon, sizeof(turnon)) < 0) { + if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (sockopt_val_t)&turnon, sizeof(turnon)) < 0) { Emsg1(M_WARNING, 0, _("Cannot set SO_REUSEADDR on socket: %s\n") , strerror(errno)); } @@ -282,7 +282,7 @@ bnet_accept(BSOCK *bsock, char *who) /* * Receive notification when connection dies. */ - if (setsockopt(newsockfd, SOL_SOCKET, SO_KEEPALIVE, &turnon, sizeof(turnon)) < 0) { + if (setsockopt(newsockfd, SOL_SOCKET, SO_KEEPALIVE, (sockopt_val_t)&turnon, sizeof(turnon)) < 0) { Emsg1(M_WARNING, 0, _("Cannot set SO_KEEPALIVE on socket: %s\n"), strerror(errno)); }