]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common,msg: define SOCKOPT_VAL_TYPE 32707/head
authorLucian Petrut <lpetrut@cloudbasesolutions.com>
Wed, 16 Oct 2019 14:56:48 +0000 (17:56 +0300)
committerLucian Petrut <lpetrut@cloudbasesolutions.com>
Wed, 8 Jul 2020 06:38:39 +0000 (06:38 +0000)
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 <lpetrut@cloudbasesolutions.com>
src/common/admin_socket_client.cc
src/include/compat.h
src/msg/async/net_handler.cc

index 45ef25ccc1fbba32bd7e41adb867a37f51093ec5..f2dd6d0e9276e2df4c5202a6620849df2cd90f5c 100644 (file)
@@ -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: "
index d91cd108d10e1ef1ebb07bcc84b3775f7e5d31a2..8018bd0a87309d39940e0866464ed14742be42ea 100644 (file)
@@ -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)
 
index 1f99979eec42a1357cf25c8e88a70f823a8e7216..accc17a6b96f7e141adbc68ac2974d206e425f42 100644 (file)
@@ -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