From: Lucian Petrut Date: Wed, 16 Oct 2019 14:56:48 +0000 (+0300) Subject: common,msg: define SOCKOPT_VAL_TYPE X-Git-Tag: wip-pdonnell-testing-20200918.022351~697^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=f80cadc99876fc516d427d9f688f5a17fbe0bf9b;p=ceph-ci.git common,msg: define SOCKOPT_VAL_TYPE On Windows, the "optval" argument of the setsockopt function is a char pointer, as opposed to a void pointer on other platforms. In order to avoid compilation issues, we'll do an explicit cast using a conditionally defined type. Signed-off-by: Lucian Petrut --- diff --git a/src/common/admin_socket_client.cc b/src/common/admin_socket_client.cc index 45ef25ccc1f..f2dd6d0e927 100644 --- a/src/common/admin_socket_client.cc +++ b/src/common/admin_socket_client.cc @@ -74,7 +74,7 @@ static std::string asok_connect(const std::string &path, int *fd) struct timeval timer; timer.tv_sec = 10; timer.tv_usec = 0; - if (::setsockopt(socket_fd, SOL_SOCKET, SO_RCVTIMEO, &timer, sizeof(timer))) { + if (::setsockopt(socket_fd, SOL_SOCKET, SO_RCVTIMEO, (SOCKOPT_VAL_TYPE)&timer, sizeof(timer))) { int err = errno; ostringstream oss; oss << "setsockopt(" << socket_fd << ", SO_RCVTIMEO) failed: " @@ -84,7 +84,7 @@ static std::string asok_connect(const std::string &path, int *fd) } timer.tv_sec = 10; timer.tv_usec = 0; - if (::setsockopt(socket_fd, SOL_SOCKET, SO_SNDTIMEO, &timer, sizeof(timer))) { + if (::setsockopt(socket_fd, SOL_SOCKET, SO_SNDTIMEO, (SOCKOPT_VAL_TYPE)&timer, sizeof(timer))) { int err = errno; ostringstream oss; oss << "setsockopt(" << socket_fd << ", SO_SNDTIMEO) failed: " diff --git a/src/include/compat.h b/src/include/compat.h index d91cd108d10..8018bd0a873 100644 --- a/src/include/compat.h +++ b/src/include/compat.h @@ -302,6 +302,11 @@ int lchown(const char *path, uid_t owner, gid_t group); // with subprocesses unless explicitly requested, we'll define this // flag as a no-op. #define O_CLOEXEC 0 +#define SOCKOPT_VAL_TYPE char* + +#else + +#define SOCKOPT_VAL_TYPE void* #define compat_mkdir(pathname, mode) mkdir(pathname, mode) diff --git a/src/msg/async/net_handler.cc b/src/msg/async/net_handler.cc index 1f99979eec4..accc17a6b96 100644 --- a/src/msg/async/net_handler.cc +++ b/src/msg/async/net_handler.cc @@ -49,7 +49,7 @@ int NetHandler::create_socket(int domain, bool reuse_addr) * will be able to close/open sockets a zillion of times */ if (reuse_addr) { int on = 1; - if (::setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) { + if (::setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (SOCKOPT_VAL_TYPE)&on, sizeof(on)) == -1) { r = errno; lderr(cct) << __func__ << " setsockopt SO_REUSEADDR failed: " << strerror(r) << dendl; @@ -99,14 +99,14 @@ int NetHandler::set_socket_options(int sd, bool nodelay, int size) // disable Nagle algorithm? if (nodelay) { int flag = 1; - r = ::setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(flag)); + r = ::setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (SOCKOPT_VAL_TYPE)&flag, sizeof(flag)); if (r < 0) { r = errno; ldout(cct, 0) << "couldn't set TCP_NODELAY: " << cpp_strerror(r) << dendl; } } if (size) { - r = ::setsockopt(sd, SOL_SOCKET, SO_RCVBUF, (void*)&size, sizeof(size)); + r = ::setsockopt(sd, SOL_SOCKET, SO_RCVBUF, (SOCKOPT_VAL_TYPE)&size, sizeof(size)); if (r < 0) { r = errno; ldout(cct, 0) << "couldn't set SO_RCVBUF to " << size << ": " << cpp_strerror(r) << dendl; @@ -116,7 +116,7 @@ int NetHandler::set_socket_options(int sd, bool nodelay, int size) // block ESIGPIPE #ifdef CEPH_USE_SO_NOSIGPIPE int val = 1; - r = ::setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, (void*)&val, sizeof(val)); + r = ::setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, (SOCKOPT_VAL_TYPE)&val, sizeof(val)); if (r) { r = errno; ldout(cct,0) << "couldn't set SO_NOSIGPIPE: " << cpp_strerror(r) << dendl; @@ -136,10 +136,10 @@ void NetHandler::set_priority(int sd, int prio, int domain) int iptos = IPTOS_CLASS_CS6; switch (domain) { case AF_INET: - r = ::setsockopt(sd, IPPROTO_IP, IP_TOS, &iptos, sizeof(iptos)); + r = ::setsockopt(sd, IPPROTO_IP, IP_TOS, (SOCKOPT_VAL_TYPE)&iptos, sizeof(iptos)); break; case AF_INET6: - r = ::setsockopt(sd, IPPROTO_IPV6, IPV6_TCLASS, &iptos, sizeof(iptos)); + r = ::setsockopt(sd, IPPROTO_IPV6, IPV6_TCLASS, (SOCKOPT_VAL_TYPE)&iptos, sizeof(iptos)); break; default: lderr(cct) << "couldn't set ToS of unknown family (" << domain << ")" @@ -156,7 +156,7 @@ void NetHandler::set_priority(int sd, int prio, int domain) // setsockopt(IPTOS_CLASS_CS6) sets the priority of the socket as 0. // See http://goo.gl/QWhvsD and http://goo.gl/laTbjT // We need to call setsockopt(SO_PRIORITY) after it. - r = ::setsockopt(sd, SOL_SOCKET, SO_PRIORITY, &prio, sizeof(prio)); + r = ::setsockopt(sd, SOL_SOCKET, SO_PRIORITY, (SOCKOPT_VAL_TYPE)&prio, sizeof(prio)); if (r < 0) { r = errno; ldout(cct, 0) << __func__ << " couldn't set SO_PRIORITY to " << prio