Commit e6d1a5ac authored by Daniel Verkamp's avatar Daniel Verkamp Committed by Jim Harris
Browse files

jsonrpc_server: allow user to specify socket type



Change-Id: I811d8c4e3659775519ca61dae31c1fe17cd7142a
Signed-off-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent 0f6c389e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -71,8 +71,8 @@ typedef void (*spdk_jsonrpc_handle_request_fn)(
	const struct spdk_json_val *params,
	const struct spdk_json_val *id);

struct spdk_jsonrpc_server *spdk_jsonrpc_server_listen(struct sockaddr *listen_addr,
		socklen_t addrlen, spdk_jsonrpc_handle_request_fn handle_request);
struct spdk_jsonrpc_server *spdk_jsonrpc_server_listen(int domain, int protocol,
		struct sockaddr *listen_addr, socklen_t addrlen, spdk_jsonrpc_handle_request_fn handle_request);

int spdk_jsonrpc_server_poll(struct spdk_jsonrpc_server *server);

+6 −3
Original line number Diff line number Diff line
@@ -34,7 +34,8 @@
#include "jsonrpc_internal.h"

struct spdk_jsonrpc_server *
spdk_jsonrpc_server_listen(struct sockaddr *listen_addr, socklen_t addrlen,
spdk_jsonrpc_server_listen(int domain, int protocol,
			   struct sockaddr *listen_addr, socklen_t addrlen,
			   spdk_jsonrpc_handle_request_fn handle_request)
{
	struct spdk_jsonrpc_server *server;
@@ -47,7 +48,7 @@ spdk_jsonrpc_server_listen(struct sockaddr *listen_addr, socklen_t addrlen,

	server->handle_request = handle_request;

	server->sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	server->sockfd = socket(domain, SOCK_STREAM, protocol);
	if (server->sockfd < 0) {
		SPDK_ERRLOG("socket() failed\n");
		free(server);
@@ -56,7 +57,9 @@ spdk_jsonrpc_server_listen(struct sockaddr *listen_addr, socklen_t addrlen,

	val = 1;
	setsockopt(server->sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
	if (protocol == IPPROTO_TCP) {
		setsockopt(server->sockfd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val));
	}

	val = 1;
	rc = ioctl(server->sockfd, FIONBIO, &val);
+7 −2
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ spdk_rpc_setup(void *arg)
{
	struct sockaddr_in	serv_addr;
	uint16_t		port;
	int			family, protocol;

	/* Unregister the one-shot setup poller */
	spdk_poller_unregister(&g_rpc_poller, NULL);
@@ -148,12 +149,16 @@ spdk_rpc_setup(void *arg)

	port = SPDK_JSONRPC_PORT_BASE + spdk_app_get_instance_id();

	family = AF_INET;
	protocol = IPPROTO_TCP;

	memset(&serv_addr, 0, sizeof(serv_addr));
	serv_addr.sin_family = AF_INET;
	serv_addr.sin_family = family;
	serv_addr.sin_addr.s_addr = INADDR_ANY;
	serv_addr.sin_port = htons(port);

	g_jsonrpc_server = spdk_jsonrpc_server_listen((struct sockaddr *)&serv_addr, sizeof(serv_addr),
	g_jsonrpc_server = spdk_jsonrpc_server_listen(family, protocol,
			   (struct sockaddr *)&serv_addr, sizeof(serv_addr),
			   spdk_jsonrpc_handler);
	if (g_jsonrpc_server == NULL) {
		SPDK_ERRLOG("spdk_jsonrpc_server_listen() failed\n");