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 *params,
|
||||||
const struct spdk_json_val *id);
|
const struct spdk_json_val *id);
|
||||||
|
|
||||||
struct spdk_jsonrpc_server *spdk_jsonrpc_server_listen(struct sockaddr *listen_addr,
|
struct spdk_jsonrpc_server *spdk_jsonrpc_server_listen(int domain, int protocol,
|
||||||
socklen_t addrlen, spdk_jsonrpc_handle_request_fn handle_request);
|
struct sockaddr *listen_addr, socklen_t addrlen, spdk_jsonrpc_handle_request_fn handle_request);
|
||||||
|
|
||||||
int spdk_jsonrpc_server_poll(struct spdk_jsonrpc_server *server);
|
int spdk_jsonrpc_server_poll(struct spdk_jsonrpc_server *server);
|
||||||
|
|
||||||
|
@ -34,7 +34,8 @@
|
|||||||
#include "jsonrpc_internal.h"
|
#include "jsonrpc_internal.h"
|
||||||
|
|
||||||
struct spdk_jsonrpc_server *
|
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)
|
spdk_jsonrpc_handle_request_fn handle_request)
|
||||||
{
|
{
|
||||||
struct spdk_jsonrpc_server *server;
|
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->handle_request = handle_request;
|
||||||
|
|
||||||
server->sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
server->sockfd = socket(domain, SOCK_STREAM, protocol);
|
||||||
if (server->sockfd < 0) {
|
if (server->sockfd < 0) {
|
||||||
SPDK_ERRLOG("socket() failed\n");
|
SPDK_ERRLOG("socket() failed\n");
|
||||||
free(server);
|
free(server);
|
||||||
@ -56,7 +57,9 @@ spdk_jsonrpc_server_listen(struct sockaddr *listen_addr, socklen_t addrlen,
|
|||||||
|
|
||||||
val = 1;
|
val = 1;
|
||||||
setsockopt(server->sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
|
setsockopt(server->sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
|
||||||
|
if (protocol == IPPROTO_TCP) {
|
||||||
setsockopt(server->sockfd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val));
|
setsockopt(server->sockfd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val));
|
||||||
|
}
|
||||||
|
|
||||||
val = 1;
|
val = 1;
|
||||||
rc = ioctl(server->sockfd, FIONBIO, &val);
|
rc = ioctl(server->sockfd, FIONBIO, &val);
|
||||||
|
@ -138,6 +138,7 @@ spdk_rpc_setup(void *arg)
|
|||||||
{
|
{
|
||||||
struct sockaddr_in serv_addr;
|
struct sockaddr_in serv_addr;
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
|
int family, protocol;
|
||||||
|
|
||||||
/* Unregister the one-shot setup poller */
|
/* Unregister the one-shot setup poller */
|
||||||
spdk_poller_unregister(&g_rpc_poller, NULL);
|
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();
|
port = SPDK_JSONRPC_PORT_BASE + spdk_app_get_instance_id();
|
||||||
|
|
||||||
|
family = AF_INET;
|
||||||
|
protocol = IPPROTO_TCP;
|
||||||
|
|
||||||
memset(&serv_addr, 0, sizeof(serv_addr));
|
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_addr.s_addr = INADDR_ANY;
|
||||||
serv_addr.sin_port = htons(port);
|
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);
|
spdk_jsonrpc_handler);
|
||||||
if (g_jsonrpc_server == NULL) {
|
if (g_jsonrpc_server == NULL) {
|
||||||
SPDK_ERRLOG("spdk_jsonrpc_server_listen() failed\n");
|
SPDK_ERRLOG("spdk_jsonrpc_server_listen() failed\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user