jsonrpc_server: allow user to specify socket type

Change-Id: I811d8c4e3659775519ca61dae31c1fe17cd7142a
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Daniel Verkamp 2016-12-13 15:58:42 -07:00 committed by Jim Harris
parent 0f6c389e69
commit e6d1a5ac36
3 changed files with 15 additions and 7 deletions

View File

@ -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);

View File

@ -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));
setsockopt(server->sockfd, IPPROTO_TCP, TCP_NODELAY, &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);

View File

@ -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");