Skip to content

Commit 34173ab

Browse files
committed
internal C level improvements
1 parent 423cf16 commit 34173ab

File tree

5 files changed

+28
-38
lines changed

5 files changed

+28
-38
lines changed

R/messenger.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ messenger <- function(url) {
3333
}
3434
on.exit(expr = {
3535
s <- .Call(rnng_send, sock, writeBin(":d ", raw()), 0L)
36-
close(sock)
36+
.Call(rnng_close, sock)
3737
invisible()
3838
})
3939
cat("\n", file = stdout())

src/aio.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ static void stream_dialer_finalizer(SEXP xptr) {
4848
if (R_ExternalPtrAddr(xptr) == NULL)
4949
return;
5050
nng_stream_dialer *xp = (nng_stream_dialer *) R_ExternalPtrAddr(xptr);
51+
nng_stream_dialer_close(xp);
5152
nng_stream_dialer_free(xp);
5253
R_ClearExternalPtr(xptr);
5354

@@ -58,6 +59,7 @@ static void stream_listener_finalizer(SEXP xptr) {
5859
if (R_ExternalPtrAddr(xptr) == NULL)
5960
return;
6061
nng_stream_listener *xp = (nng_stream_listener *) R_ExternalPtrAddr(xptr);
62+
nng_stream_listener_close(xp);
6163
nng_stream_listener_free(xp);
6264
R_ClearExternalPtr(xptr);
6365

@@ -68,6 +70,7 @@ static void stream_finalizer(SEXP xptr) {
6870
if (R_ExternalPtrAddr(xptr) == NULL)
6971
return;
7072
nng_stream *xp = (nng_stream *) R_ExternalPtrAddr(xptr);
73+
nng_stream_close(xp);
7174
nng_stream_free(xp);
7275
R_ClearExternalPtr(xptr);
7376

@@ -467,7 +470,7 @@ SEXP rnng_stream_dial(SEXP url, SEXP textframes) {
467470
nng_url_free(up);
468471
return Rf_ScalarInteger(xc);
469472
}
470-
if ((xc = nng_tls_config_auth_mode(cfg, 0)) ||
473+
if ((xc = nng_tls_config_auth_mode(cfg, 1)) ||
471474
(xc = nng_stream_dialer_set_ptr(dp, "tls-config", cfg))) {
472475
nng_tls_config_free(cfg);
473476
nng_stream_dialer_free(dp);
@@ -555,13 +558,13 @@ SEXP rnng_stream_listen(SEXP url, SEXP textframes) {
555558
}
556559

557560
if (!strcmp(up->u_scheme, "wss")) {
558-
xc = nng_tls_config_alloc(&cfg, 0);
561+
xc = nng_tls_config_alloc(&cfg, 1);
559562
if (xc) {
560563
nng_stream_listener_free(lp);
561564
nng_url_free(up);
562565
return Rf_ScalarInteger(xc);
563566
}
564-
if ((xc = nng_tls_config_auth_mode(cfg, 0)) ||
567+
if ((xc = nng_tls_config_auth_mode(cfg, 1)) ||
565568
(xc = nng_stream_listener_set_ptr(lp, "tls-config", cfg))) {
566569
nng_tls_config_free(cfg);
567570
nng_stream_listener_free(lp);
@@ -999,7 +1002,7 @@ SEXP rnng_ncurl_aio(SEXP http, SEXP method, SEXP ctype, SEXP auth, SEXP data) {
9991002
nng_url_free(url);
10001003
return Rf_ScalarInteger(xc);
10011004
}
1002-
if ((xc = nng_tls_config_auth_mode(cfg, 0)) ||
1005+
if ((xc = nng_tls_config_auth_mode(cfg, 1)) ||
10031006
(xc = nng_http_client_set_tls(client, cfg))) {
10041007
nng_tls_config_free(cfg);
10051008
nng_aio_free(aiop);

src/core.c

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ static void context_finalizer(SEXP xptr) {
1010
if (R_ExternalPtrAddr(xptr) == NULL)
1111
return;
1212
nng_ctx *xp = (nng_ctx *) R_ExternalPtrAddr(xptr);
13+
nng_ctx_close(*xp);
1314
R_Free(xp);
1415
R_ClearExternalPtr(xptr);
1516

@@ -20,6 +21,7 @@ static void dialer_finalizer(SEXP xptr) {
2021
if (R_ExternalPtrAddr(xptr) == NULL)
2122
return;
2223
nng_dialer *xp = (nng_dialer *) R_ExternalPtrAddr(xptr);
24+
nng_dialer_close(*xp);
2325
R_Free(xp);
2426
R_ClearExternalPtr(xptr);
2527

@@ -30,6 +32,7 @@ static void listener_finalizer(SEXP xptr) {
3032
if (R_ExternalPtrAddr(xptr) == NULL)
3133
return;
3234
nng_listener *xp = (nng_listener *) R_ExternalPtrAddr(xptr);
35+
nng_listener_close(*xp);
3336
R_Free(xp);
3437
R_ClearExternalPtr(xptr);
3538

@@ -54,12 +57,10 @@ SEXP rnng_ctx_open(SEXP socket) {
5457
SET_STRING_ELT(klass, 0, Rf_mkChar("nanoContext"));
5558
SET_STRING_ELT(klass, 1, Rf_mkChar("nano"));
5659
Rf_classgets(context, klass);
57-
int id = nng_ctx_id(*ctxp);
58-
Rf_setAttrib(context, nano_IdSymbol, Rf_ScalarInteger(id));
60+
Rf_setAttrib(context, nano_IdSymbol, Rf_ScalarInteger((int) ctxp->id));
5961
Rf_setAttrib(context, nano_StateSymbol, Rf_mkString("opened"));
6062
Rf_setAttrib(context, nano_ProtocolSymbol, Rf_getAttrib(socket, nano_ProtocolSymbol));
61-
int sid = nng_socket_id(*sock);
62-
Rf_setAttrib(context, nano_SocketSymbol, Rf_ScalarInteger(sid));
63+
Rf_setAttrib(context, nano_SocketSymbol, Rf_ScalarInteger((int) sock->id));
6364

6465
UNPROTECT(2);
6566
return context;
@@ -98,12 +99,10 @@ SEXP rnng_dial(SEXP socket, SEXP url) {
9899
SET_STRING_ELT(klass, 0, Rf_mkChar("nanoDialer"));
99100
SET_STRING_ELT(klass, 1, Rf_mkChar("nano"));
100101
Rf_classgets(dialer, klass);
101-
int id = nng_dialer_id(*dp);
102-
Rf_setAttrib(dialer, nano_IdSymbol, Rf_ScalarInteger(id));
102+
Rf_setAttrib(dialer, nano_IdSymbol, Rf_ScalarInteger((int) dp->id));
103103
Rf_setAttrib(dialer, nano_UrlSymbol, url);
104104
Rf_setAttrib(dialer, nano_StateSymbol, Rf_mkString("started"));
105-
int sid = nng_socket_id(*sock);
106-
Rf_setAttrib(dialer, nano_SocketSymbol, Rf_ScalarInteger(sid));
105+
Rf_setAttrib(dialer, nano_SocketSymbol, Rf_ScalarInteger((int) sock->id));
107106

108107
UNPROTECT(2);
109108
return dialer;
@@ -128,12 +127,10 @@ SEXP rnng_dialer_create(SEXP socket, SEXP url) {
128127
SET_STRING_ELT(klass, 0, Rf_mkChar("nanoDialer"));
129128
SET_STRING_ELT(klass, 1, Rf_mkChar("nano"));
130129
Rf_classgets(dialer, klass);
131-
int id = nng_dialer_id(*dp);
132-
Rf_setAttrib(dialer, nano_IdSymbol, Rf_ScalarInteger(id));
130+
Rf_setAttrib(dialer, nano_IdSymbol, Rf_ScalarInteger((int) dp->id));
133131
Rf_setAttrib(dialer, nano_UrlSymbol, url);
134132
Rf_setAttrib(dialer, nano_StateSymbol, Rf_mkString("not started"));
135-
int sid = nng_socket_id(*sock);
136-
Rf_setAttrib(dialer, nano_SocketSymbol, Rf_ScalarInteger(sid));
133+
Rf_setAttrib(dialer, nano_SocketSymbol, Rf_ScalarInteger((int) sock->id));
137134

138135
UNPROTECT(2);
139136
return dialer;
@@ -158,12 +155,10 @@ SEXP rnng_listen(SEXP socket, SEXP url) {
158155
SET_STRING_ELT(klass, 0, Rf_mkChar("nanoListener"));
159156
SET_STRING_ELT(klass, 1, Rf_mkChar("nano"));
160157
Rf_classgets(listener, klass);
161-
int id = nng_listener_id(*lp);
162-
Rf_setAttrib(listener, nano_IdSymbol, Rf_ScalarInteger(id));
158+
Rf_setAttrib(listener, nano_IdSymbol, Rf_ScalarInteger((int) lp->id));
163159
Rf_setAttrib(listener, nano_UrlSymbol, url);
164160
Rf_setAttrib(listener, nano_StateSymbol, Rf_mkString("started"));
165-
int sid = nng_socket_id(*sock);
166-
Rf_setAttrib(listener, nano_SocketSymbol, Rf_ScalarInteger(sid));
161+
Rf_setAttrib(listener, nano_SocketSymbol, Rf_ScalarInteger((int) sock->id));
167162

168163
UNPROTECT(2);
169164
return listener;
@@ -188,12 +183,10 @@ SEXP rnng_listener_create(SEXP socket, SEXP url) {
188183
SET_STRING_ELT(klass, 0, Rf_mkChar("nanoListener"));
189184
SET_STRING_ELT(klass, 1, Rf_mkChar("nano"));
190185
Rf_classgets(listener, klass);
191-
int id = nng_listener_id(*lp);
192-
Rf_setAttrib(listener, nano_IdSymbol, Rf_ScalarInteger(id));
186+
Rf_setAttrib(listener, nano_IdSymbol, Rf_ScalarInteger((int) lp->id));
193187
Rf_setAttrib(listener, nano_UrlSymbol, url);
194188
Rf_setAttrib(listener, nano_StateSymbol, Rf_mkString("not started"));
195-
int sid = nng_socket_id(*sock);
196-
Rf_setAttrib(listener, nano_SocketSymbol, Rf_ScalarInteger(sid));
189+
Rf_setAttrib(listener, nano_SocketSymbol, Rf_ScalarInteger((int) sock->id));
197190

198191
UNPROTECT(2);
199192
return listener;

src/sockets.c

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ static void socket_finalizer(SEXP xptr) {
2121
if (R_ExternalPtrAddr(xptr) == NULL)
2222
return;
2323
nng_socket *xp = (nng_socket *) R_ExternalPtrAddr(xptr);
24+
nng_close(*xp);
2425
R_Free(xp);
2526
R_ClearExternalPtr(xptr);
2627

@@ -63,8 +64,7 @@ SEXP rnng_protocol_open(SEXP protocol) {
6364
SET_STRING_ELT(klass, 0, Rf_mkChar("nanoSocket"));
6465
SET_STRING_ELT(klass, 1, Rf_mkChar("nano"));
6566
Rf_classgets(socket, klass);
66-
int id = nng_socket_id(*sock);
67-
Rf_setAttrib(socket, nano_IdSymbol, Rf_ScalarInteger(id));
67+
Rf_setAttrib(socket, nano_IdSymbol, Rf_ScalarInteger((int) sock->id));
6868
Rf_setAttrib(socket, nano_StateSymbol, Rf_mkString("opened"));
6969
Rf_setAttrib(socket, nano_ProtocolSymbol, protocol);
7070
UNPROTECT(2);
@@ -107,40 +107,36 @@ static void rnng_thread(void *arg) {
107107

108108
while (1) {
109109
xc = nng_recv(*sock, &buf, &sz, 1u);
110+
time(&now);
111+
tms = localtime(&now);
112+
110113
if (xc) {
111-
time(&now);
112-
tms = localtime(&now);
113114
REprintf("| messenger session ended: %d-%02d-%02d %02d:%02d:%02d\n",
114115
tms->tm_year + 1900, tms->tm_mon + 1, tms->tm_mday,
115116
tms->tm_hour, tms->tm_min, tms->tm_sec);
116117
break;
117118
}
118119
if (!strcmp(buf, ":c ")) {
119-
time(&now);
120-
tms = localtime(&now);
121120
REprintf("| <- peer connected: %d-%02d-%02d %02d:%02d:%02d\n",
122121
tms->tm_year + 1900, tms->tm_mon + 1, tms->tm_mday,
123122
tms->tm_hour, tms->tm_min, tms->tm_sec);
124123
nng_free(buf, sz);
125124
continue;
126125
}
127126
if (!strcmp(buf, ":d ")) {
128-
time(&now);
129-
tms = localtime(&now);
130127
REprintf("| -> peer disconnected: %d-%02d-%02d %02d:%02d:%02d\n",
131128
tms->tm_year + 1900, tms->tm_mon + 1, tms->tm_mday,
132129
tms->tm_hour, tms->tm_min, tms->tm_sec);
133130
nng_free(buf, sz);
134131
continue;
135132
}
136133

137-
time(&now);
138-
tms = localtime(&now);
139134
Rprintf("%s\n%*s< %d-%02d-%02d %02d:%02d:%02d\n",
140135
buf, sz, "",
141136
tms->tm_year + 1900, tms->tm_mon + 1, tms->tm_mday,
142137
tms->tm_hour, tms->tm_min, tms->tm_sec);
143138
nng_free(buf, sz);
139+
144140
}
145141

146142
}
@@ -189,8 +185,6 @@ SEXP rnng_messenger(SEXP url) {
189185
R_RegisterCFinalizerEx(xptr, thread_finalizer, TRUE);
190186
R_MakeWeakRef(socket, xptr, R_NilValue, TRUE);
191187

192-
Rf_classgets(socket, Rf_mkString("nanoSocket"));
193-
194188
UNPROTECT(2);
195189
return socket;
196190

src/utils.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ SEXP rnng_ncurl(SEXP http, SEXP method, SEXP ctype, SEXP auth, SEXP data) {
135135
nng_url_free(url);
136136
return Rf_ScalarInteger(xc);
137137
}
138-
if ((xc = nng_tls_config_auth_mode(cfg, 0)) ||
138+
if ((xc = nng_tls_config_auth_mode(cfg, 1)) ||
139139
(xc = nng_http_client_set_tls(client, cfg))) {
140140
nng_tls_config_free(cfg);
141141
nng_aio_free(aio);

0 commit comments

Comments
 (0)