Skip to content

Commit 3b11ef9

Browse files
committed
refactor: move CConnman::SocketEventsMode to util/sock.h
1 parent 26cfbb0 commit 3b11ef9

File tree

5 files changed

+73
-61
lines changed

5 files changed

+73
-61
lines changed

src/init.cpp

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2515,23 +2515,9 @@ bool AppInitMain(const CoreContext& context, NodeContext& node, interfaces::Bloc
25152515
}
25162516
}
25172517

2518-
std::string strSocketEventsMode = args.GetArg("-socketevents", DEFAULT_SOCKETEVENTS);
2519-
if (strSocketEventsMode == "select") {
2520-
connOptions.socketEventsMode = CConnman::SOCKETEVENTS_SELECT;
2521-
#ifdef USE_POLL
2522-
} else if (strSocketEventsMode == "poll") {
2523-
connOptions.socketEventsMode = CConnman::SOCKETEVENTS_POLL;
2524-
#endif
2525-
#ifdef USE_EPOLL
2526-
} else if (strSocketEventsMode == "epoll") {
2527-
connOptions.socketEventsMode = CConnman::SOCKETEVENTS_EPOLL;
2528-
#endif
2529-
#ifdef USE_KQUEUE
2530-
} else if (strSocketEventsMode == "kqueue") {
2531-
connOptions.socketEventsMode = CConnman::SOCKETEVENTS_KQUEUE;
2532-
#endif
2533-
} else {
2534-
return InitError(strprintf(_("Invalid -socketevents ('%s') specified. Only these modes are supported: %s"), strSocketEventsMode, GetSupportedSocketEventsStr()));
2518+
std::string sem_str = args.GetArg("-socketevents", DEFAULT_SOCKETEVENTS);
2519+
if (SEMFromString(sem_str) == SocketEventsMode::Unknown) {
2520+
return InitError(strprintf(_("Invalid -socketevents ('%s') specified. Only these modes are supported: %s"), sem_str, GetSupportedSocketEventsStr()));
25352521
}
25362522

25372523
const std::string& i2psam_arg = args.GetArg("-i2psam", "");

src/net.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,21 +1782,21 @@ void CConnman::SocketEvents(const std::vector<CNode*>& nodes,
17821782
{
17831783
switch (socketEventsMode) {
17841784
#ifdef USE_KQUEUE
1785-
case SOCKETEVENTS_KQUEUE:
1785+
case SocketEventsMode::KQueue:
17861786
SocketEventsKqueue(recv_set, send_set, error_set, only_poll);
17871787
break;
17881788
#endif
17891789
#ifdef USE_EPOLL
1790-
case SOCKETEVENTS_EPOLL:
1790+
case SocketEventsMode::EPoll:
17911791
SocketEventsEpoll(recv_set, send_set, error_set, only_poll);
17921792
break;
17931793
#endif
17941794
#ifdef USE_POLL
1795-
case SOCKETEVENTS_POLL:
1795+
case SocketEventsMode::Poll:
17961796
SocketEventsPoll(nodes, recv_set, send_set, error_set, only_poll);
17971797
break;
17981798
#endif
1799-
case SOCKETEVENTS_SELECT:
1799+
case SocketEventsMode::Select:
18001800
SocketEventsSelect(nodes, recv_set, send_set, error_set, only_poll);
18011801
break;
18021802
default:
@@ -3133,7 +3133,7 @@ bool CConnman::BindListenPort(const CService& addrBind, bilingual_str& strError,
31333133
}
31343134

31353135
#ifdef USE_KQUEUE
3136-
if (socketEventsMode == SOCKETEVENTS_KQUEUE) {
3136+
if (socketEventsMode == SocketEventsMode::KQueue) {
31373137
struct kevent event;
31383138
EV_SET(&event, sock->Get(), EVFILT_READ, EV_ADD, 0, 0, nullptr);
31393139
if (kevent(kqueuefd, &event, 1, nullptr, 0, nullptr) != 0) {
@@ -3145,7 +3145,7 @@ bool CConnman::BindListenPort(const CService& addrBind, bilingual_str& strError,
31453145
#endif
31463146

31473147
#ifdef USE_EPOLL
3148-
if (socketEventsMode == SOCKETEVENTS_EPOLL) {
3148+
if (socketEventsMode == SocketEventsMode::EPoll) {
31493149
epoll_event event;
31503150
event.data.fd = sock->Get();
31513151
event.events = EPOLLIN;
@@ -3302,7 +3302,7 @@ bool CConnman::Start(CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_met
33023302
Init(connOptions);
33033303

33043304
#ifdef USE_KQUEUE
3305-
if (socketEventsMode == SOCKETEVENTS_KQUEUE) {
3305+
if (socketEventsMode == SocketEventsMode::KQueue) {
33063306
kqueuefd = kqueue();
33073307
if (kqueuefd == -1) {
33083308
LogPrintf("kqueue failed\n");
@@ -3312,7 +3312,7 @@ bool CConnman::Start(CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_met
33123312
#endif
33133313

33143314
#ifdef USE_EPOLL
3315-
if (socketEventsMode == SOCKETEVENTS_EPOLL) {
3315+
if (socketEventsMode == SocketEventsMode::EPoll) {
33163316
epollfd = epoll_create1(0);
33173317
if (epollfd == -1) {
33183318
LogPrintf("epoll_create1 failed\n");
@@ -3405,7 +3405,7 @@ bool CConnman::Start(CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_met
34053405
LogPrint(BCLog::NET, "fcntl for O_NONBLOCK on wakeupPipe failed\n");
34063406
}
34073407
#ifdef USE_KQUEUE
3408-
if (socketEventsMode == SOCKETEVENTS_KQUEUE) {
3408+
if (socketEventsMode == SocketEventsMode::KQueue) {
34093409
struct kevent event;
34103410
EV_SET(&event, wakeupPipe[0], EVFILT_READ, EV_ADD, 0, 0, nullptr);
34113411
int r = kevent(kqueuefd, &event, 1, nullptr, 0, nullptr);
@@ -3417,7 +3417,7 @@ bool CConnman::Start(CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_met
34173417
}
34183418
#endif
34193419
#ifdef USE_EPOLL
3420-
if (socketEventsMode == SOCKETEVENTS_EPOLL) {
3420+
if (socketEventsMode == SocketEventsMode::EPoll) {
34213421
epoll_event event;
34223422
event.events = EPOLLIN;
34233423
event.data.fd = wakeupPipe[0];
@@ -3567,14 +3567,14 @@ void CConnman::StopNodes()
35673567
for (ListenSocket& hListenSocket : vhListenSocket)
35683568
if (hListenSocket.socket != INVALID_SOCKET) {
35693569
#ifdef USE_KQUEUE
3570-
if (socketEventsMode == SOCKETEVENTS_KQUEUE) {
3570+
if (socketEventsMode == SocketEventsMode::KQueue) {
35713571
struct kevent event;
35723572
EV_SET(&event, hListenSocket.socket, EVFILT_READ, EV_DELETE, 0, 0, nullptr);
35733573
kevent(kqueuefd, &event, 1, nullptr, 0, nullptr);
35743574
}
35753575
#endif
35763576
#ifdef USE_EPOLL
3577-
if (socketEventsMode == SOCKETEVENTS_EPOLL) {
3577+
if (socketEventsMode == SocketEventsMode::EPoll) {
35783578
epoll_ctl(epollfd, EPOLL_CTL_DEL, hListenSocket.socket, nullptr);
35793579
}
35803580
#endif
@@ -3606,7 +3606,7 @@ void CConnman::StopNodes()
36063606
semAddnode.reset();
36073607

36083608
#ifdef USE_KQUEUE
3609-
if (socketEventsMode == SOCKETEVENTS_KQUEUE && kqueuefd != -1) {
3609+
if (socketEventsMode == SocketEventsMode::KQueue && kqueuefd != -1) {
36103610
#ifdef USE_WAKEUP_PIPE
36113611
struct kevent event;
36123612
EV_SET(&event, wakeupPipe[0], EVFILT_READ, EV_DELETE, 0, 0, nullptr);
@@ -3617,7 +3617,7 @@ void CConnman::StopNodes()
36173617
kqueuefd = -1;
36183618
#endif
36193619
#ifdef USE_EPOLL
3620-
if (socketEventsMode == SOCKETEVENTS_EPOLL && epollfd != -1) {
3620+
if (socketEventsMode == SocketEventsMode::EPoll && epollfd != -1) {
36213621
#ifdef USE_WAKEUP_PIPE
36223622
epoll_ctl(epollfd, EPOLL_CTL_DEL, wakeupPipe[0], nullptr);
36233623
#endif
@@ -4237,7 +4237,7 @@ uint64_t CConnman::CalculateKeyedNetGroup(const CAddress& ad) const
42374237
void CConnman::RegisterEvents(CNode *pnode)
42384238
{
42394239
#ifdef USE_KQUEUE
4240-
if (socketEventsMode == SOCKETEVENTS_KQUEUE) {
4240+
if (socketEventsMode == SocketEventsMode::KQueue) {
42414241
LOCK(pnode->cs_hSocket);
42424242
assert(pnode->hSocket != INVALID_SOCKET);
42434243

@@ -4253,7 +4253,7 @@ void CConnman::RegisterEvents(CNode *pnode)
42534253
}
42544254
#endif
42554255
#ifdef USE_EPOLL
4256-
if (socketEventsMode == SOCKETEVENTS_EPOLL) {
4256+
if (socketEventsMode == SocketEventsMode::EPoll) {
42574257
LOCK(pnode->cs_hSocket);
42584258
assert(pnode->hSocket != INVALID_SOCKET);
42594259

@@ -4274,7 +4274,7 @@ void CConnman::RegisterEvents(CNode *pnode)
42744274
void CConnman::UnregisterEvents(CNode *pnode)
42754275
{
42764276
#ifdef USE_KQUEUE
4277-
if (socketEventsMode == SOCKETEVENTS_KQUEUE) {
4277+
if (socketEventsMode == SocketEventsMode::KQueue) {
42784278
AssertLockHeld(pnode->cs_hSocket);
42794279
if (pnode->hSocket == INVALID_SOCKET) {
42804280
return;
@@ -4292,7 +4292,7 @@ void CConnman::UnregisterEvents(CNode *pnode)
42924292
}
42934293
#endif
42944294
#ifdef USE_EPOLL
4295-
if (socketEventsMode == SOCKETEVENTS_EPOLL) {
4295+
if (socketEventsMode == SocketEventsMode::EPoll) {
42964296
AssertLockHeld(pnode->cs_hSocket);
42974297
if (pnode->hSocket == INVALID_SOCKET) {
42984298
return;

src/net.h

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -822,13 +822,6 @@ class CConnman
822822
{
823823
friend class CNode;
824824
public:
825-
enum SocketEventsMode {
826-
SOCKETEVENTS_SELECT = 0,
827-
SOCKETEVENTS_POLL = 1,
828-
SOCKETEVENTS_EPOLL = 2,
829-
SOCKETEVENTS_KQUEUE = 3,
830-
};
831-
832825
struct Options
833826
{
834827
ServiceFlags nLocalServices = NODE_NONE;
@@ -852,7 +845,7 @@ friend class CNode;
852845
bool m_use_addrman_outgoing = true;
853846
std::vector<std::string> m_specified_outgoing;
854847
std::vector<std::string> m_added_nodes;
855-
SocketEventsMode socketEventsMode = SOCKETEVENTS_SELECT;
848+
SocketEventsMode socketEventsMode = SocketEventsMode::Select;
856849
std::vector<bool> m_asmap;
857850
bool m_i2p_accept_incoming;
858851
};

src/rpc/net.cpp

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -669,24 +669,9 @@ static RPCHelpMan getnetworkinfo()
669669
obj.pushKV("connections_mn", (int)node.connman->GetNodeCount(ConnectionDirection::Verified));
670670
obj.pushKV("connections_mn_in", (int)node.connman->GetNodeCount(ConnectionDirection::VerifiedIn));
671671
obj.pushKV("connections_mn_out", (int)node.connman->GetNodeCount(ConnectionDirection::VerifiedOut));
672-
std::string strSocketEvents;
673-
switch (node.connman->GetSocketEventsMode()) {
674-
case CConnman::SOCKETEVENTS_SELECT:
675-
strSocketEvents = "select";
676-
break;
677-
case CConnman::SOCKETEVENTS_POLL:
678-
strSocketEvents = "poll";
679-
break;
680-
case CConnman::SOCKETEVENTS_EPOLL:
681-
strSocketEvents = "epoll";
682-
break;
683-
case CConnman::SOCKETEVENTS_KQUEUE:
684-
strSocketEvents = "kqueue";
685-
break;
686-
default:
687-
CHECK_NONFATAL(false);
688-
}
689-
obj.pushKV("socketevents", strSocketEvents);
672+
std::string sem_str = SEMToString(node.connman->GetSocketEventsMode());
673+
CHECK_NONFATAL(sem_str != "unknown");
674+
obj.pushKV("socketevents", sem_str);
690675
}
691676
obj.pushKV("networks", GetNetworksInfo());
692677
obj.pushKV("relayfee", ValueFromAmount(::minRelayTxFee.GetFeePerK()));

src/util/sock.h

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,54 @@
1818
*/
1919
static constexpr auto MAX_WAIT_FOR_IO = 1s;
2020

21+
enum class SocketEventsMode : int8_t {
22+
Select = 0,
23+
Poll = 1,
24+
EPoll = 2,
25+
KQueue = 3,
26+
27+
Unknown = -1
28+
};
29+
30+
/* Converts SocketEventsMode value to string with additional check to report modes not compiled for as unknown */
31+
static std::string SEMToString(const SocketEventsMode val)
32+
{
33+
switch (val) {
34+
case (SocketEventsMode::Select):
35+
return "select";
36+
#ifdef USE_POLL
37+
case (SocketEventsMode::Poll):
38+
return "poll";
39+
#endif /* USE_POLL */
40+
#ifdef USE_EPOLL
41+
case (SocketEventsMode::EPoll):
42+
return "epoll";
43+
#endif /* USE_EPOLL */
44+
#ifdef USE_KQUEUE
45+
case (SocketEventsMode::KQueue):
46+
return "kqueue";
47+
#endif /* USE_KQUEUE */
48+
default:
49+
return "unknown";
50+
};
51+
}
52+
53+
/* Converts string to SocketEventsMode value with additional check to report modes not compiled for as unknown */
54+
static SocketEventsMode SEMFromString(const std::string str)
55+
{
56+
if (str == "select") { return SocketEventsMode::Select; }
57+
#ifdef USE_POLL
58+
else if (str == "poll") { return SocketEventsMode::Poll; }
59+
#endif /* USE_POLL */
60+
#ifdef USE_EPOLL
61+
else if (str == "epoll") { return SocketEventsMode::EPoll; }
62+
#endif /* USE_EPOLL */
63+
#ifdef USE_KQUEUE
64+
else if (str == "kqueue") { return SocketEventsMode::KQueue; }
65+
#endif /* USE_KQUEUE */
66+
else { return SocketEventsMode::Unknown; }
67+
}
68+
2169
/**
2270
* RAII helper class that manages a socket. Mimics `std::unique_ptr`, but instead of a pointer it
2371
* contains a socket and closes it automatically when it goes out of scope.

0 commit comments

Comments
 (0)