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:
parent
0f6c389e69
commit
e6d1a5ac36
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user