Просмотр исходного кода

Merge branch 'flatiron' of ssh://corosync.org/var/lib/git/corosync into flatiron

Steven Dake 15 лет назад
Родитель
Сommit
f115552253
1 измененных файлов с 31 добавлено и 0 удалено
  1. 31 0
      exec/totemudpu.c

+ 31 - 0
exec/totemudpu.c

@@ -1302,6 +1302,8 @@ static int totemudpu_build_sockets_ip (
 	struct sockaddr_storage sockaddr;
 	int addrlen;
 	int res;
+	unsigned int recvbuf_size;
+	unsigned int optlen = sizeof (recvbuf_size);
 
 	/*
 	 * Setup unicast socket
@@ -1342,6 +1344,20 @@ static int totemudpu_build_sockets_ip (
 		return (-1);
 	}
 
+	/*
+	 * the token_socket can receive many messages.  Allow a large number
+	 * of receive messages on this socket
+	 */
+	recvbuf_size = MCAST_SOCKET_BUFFER_SIZE;
+	res = setsockopt (instance->token_socket, SOL_SOCKET, SO_RCVBUF,
+		&recvbuf_size, optlen);
+	if (res == -1) {
+		char error_str[100];
+		strerror_r (errno, error_str, 100);
+		log_printf (instance->totemudpu_log_level_notice,
+			"Could not set recvbuf size %s\n", error_str);
+	}
+
 	return 0;
 }
 
@@ -1651,6 +1667,8 @@ int totemudpu_member_add (
 
 	struct totemudpu_member *new_member;
 	int res;
+	unsigned int sendbuf_size;
+	unsigned int optlen = sizeof (sendbuf_size);
 	char error_str[100];
 
 	new_member = malloc (sizeof (struct totemudpu_member));
@@ -1675,6 +1693,19 @@ int totemudpu_member_add (
 			"Could not set non-blocking operation on token socket: %s\n", error_str);
 		return (-1);
 	}
+
+	/*
+ 	 * These sockets are used to send multicast messages, so their buffers
+ 	 * should be large
+ 	 */
+	sendbuf_size = MCAST_SOCKET_BUFFER_SIZE;
+	res = setsockopt (new_member->fd, SOL_SOCKET, SO_SNDBUF,
+		&sendbuf_size, optlen);
+	if (res == -1) {
+		strerror_r (errno, error_str, 100);
+		log_printf (instance->totemudpu_log_level_notice,
+			"Could not set sendbuf size %s\n", error_str);
+	}
 	return (0);
 }