1
0
mirror of https://github.com/coturn/coturn.git synced 2026-05-05 02:46:08 +02:00

Replace perror with logging (#1831)

Replace all calls to `perror` with log message

perror printed messages do not follow logging format, sometimes provided
duplicate information
This commit is contained in:
Pavel Punsky 2026-03-08 16:24:00 -07:00 committed by GitHub
parent 9467af5041
commit dbfa9dbb53
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 126 additions and 123 deletions

View File

@ -64,6 +64,7 @@
#include <unistd.h>
#endif
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -90,7 +91,7 @@ int socket_set_nonblocking(evutil_socket_t fd) {
ioctlsocket(fd, FIONBIO, (unsigned long *)&nonblocking);
#else
if (fcntl(fd, F_SETFL, O_NONBLOCK) == -1) {
perror("O_NONBLOCK");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "O_NONBLOCK: %s\n", strerror(errno));
return -1;
}
#endif
@ -122,8 +123,8 @@ int set_sock_buf_size(evutil_socket_t fd, int sz0) {
}
if (sz < 1) {
perror("Cannot set socket rcv size");
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "Cannot set rcv sock size %d on fd %d\n", sz0, fd);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot set receive sock size %d on fd %d. Error: %s\n", sz0, fd,
strerror(errno));
}
sz = sz0;
@ -136,8 +137,8 @@ int set_sock_buf_size(evutil_socket_t fd, int sz0) {
}
if (sz < 1) {
perror("Cannot set socket snd size");
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "Cannot set snd sock size %d on fd %d\n", sz0, fd);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot set send socket size %d on fd %d. Error: %s\n", sz0, fd,
strerror(errno));
}
return 0;
@ -206,7 +207,7 @@ int socket_set_reusable(evutil_socket_t fd, int flag, SOCKET_TYPE st) {
int on = flag;
const int ret = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const void *)&on, (socklen_t)sizeof(on));
if (ret < 0) {
perror("SO_REUSEADDR");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "SO_REUSEADDR: %s\n", strerror(errno));
}
}
#endif
@ -218,7 +219,7 @@ int socket_set_reusable(evutil_socket_t fd, int flag, SOCKET_TYPE st) {
int on = flag;
int ret = setsockopt(fd, IPPROTO_SCTP, SCTP_REUSE_PORT, (const void *)&on, (socklen_t)sizeof(on));
if (ret < 0) {
perror("SCTP_REUSE_PORT");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "SCTP_REUSE_PORT: %s\n", strerror(errno));
}
}
}
@ -249,9 +250,10 @@ int sock_bind_to_device(evutil_socket_t fd, const unsigned char *ifname) {
if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, (const void *)&ifr, sizeof(ifr)) < 0) {
if (socket_eperm()) {
perror("You must obtain superuser privileges to bind a socket to device");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "You must obtain superuser privileges to bind a socket to device: %s\n",
strerror(errno));
} else {
perror("Cannot bind socket to device");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot bind socket to device: %s\n", strerror(errno));
}
return -1;
@ -285,7 +287,7 @@ int addr_connect(evutil_socket_t fd, const ioa_addr *addr, int *out_errno) {
}
if (err < 0 && !socket_einprogress()) {
perror("Connect");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Connect: %s\n", strerror(errno));
}
return err;
@ -318,11 +320,9 @@ int addr_bind(evutil_socket_t fd, const ioa_addr *addr, int reusable, int debug,
}
if (ret < 0) {
if (debug) {
const int err = socket_errno();
perror("bind");
char str[MAX_IOA_ADDR_STRING];
addr_to_string(addr, str);
TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "Trying to bind fd %d to <%s>: errno=%d\n", fd, str, err);
TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "Trying to bind fd %d to <%s>: errno=%d\n", fd, str, socket_errno());
}
}
return ret;
@ -364,7 +364,7 @@ int get_raw_socket_ttl(evutil_socket_t fd, int family) {
#else
socklen_t slen = (socklen_t)sizeof(ttl);
if (getsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, (void *)&ttl, &slen) < 0) {
perror("get HOPLIMIT on socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "get HOPLIMIT on socket: %s\n", strerror(errno));
return TTL_IGNORE;
}
#endif
@ -377,7 +377,7 @@ int get_raw_socket_ttl(evutil_socket_t fd, int family) {
#else
socklen_t slen = (socklen_t)sizeof(ttl);
if (getsockopt(fd, IPPROTO_IP, IP_TTL, (void *)&ttl, &slen) < 0) {
perror("get TTL on socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "get TTL on socket: %s\n", strerror(errno));
return TTL_IGNORE;
}
#endif
@ -400,7 +400,7 @@ int get_raw_socket_tos(evutil_socket_t fd, int family) {
#else
socklen_t slen = (socklen_t)sizeof(tos);
if (getsockopt(fd, IPPROTO_IPV6, IPV6_TCLASS, (void *)&tos, &slen) < 0) {
perror("get TCLASS on socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "get TCLASS on socket: %s\n", strerror(errno));
return -1;
}
#endif
@ -413,7 +413,7 @@ int get_raw_socket_tos(evutil_socket_t fd, int family) {
#else
socklen_t slen = (socklen_t)sizeof(tos);
if (getsockopt(fd, IPPROTO_IP, IP_TOS, (void *)&tos, &slen) < 0) {
perror("get TOS on socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "get TOS on socket: %s\n", strerror(errno));
return -1;
}
#endif
@ -433,7 +433,7 @@ int set_raw_socket_ttl(evutil_socket_t fd, int family, int ttl) {
#else
CORRECT_RAW_TTL(ttl);
if (setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, (const void *)&ttl, sizeof(ttl)) < 0) {
perror("set HOPLIMIT on socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "set HOPLIMIT on socket: %s\n", strerror(errno));
return -1;
}
#endif
@ -444,7 +444,7 @@ int set_raw_socket_ttl(evutil_socket_t fd, int family, int ttl) {
#else
CORRECT_RAW_TTL(ttl);
if (setsockopt(fd, IPPROTO_IP, IP_TTL, (const void *)&ttl, sizeof(ttl)) < 0) {
perror("set TTL on socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "set TTL on socket: %s\n", strerror(errno));
return -1;
}
#endif
@ -462,7 +462,7 @@ int set_raw_socket_tos(evutil_socket_t fd, int family, int tos) {
#else
CORRECT_RAW_TOS(tos);
if (setsockopt(fd, IPPROTO_IPV6, IPV6_TCLASS, (const void *)&tos, sizeof(tos)) < 0) {
perror("set TCLASS on socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "set TCLASS on socket: %s\n", strerror(errno));
return -1;
}
#endif
@ -472,7 +472,7 @@ int set_raw_socket_tos(evutil_socket_t fd, int family, int tos) {
UNUSED_ARG(tos);
#else
if (setsockopt(fd, IPPROTO_IP, IP_TOS, (const void *)&tos, sizeof(tos)) < 0) {
perror("set TOS on socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "set TOS on socket: %s\n", strerror(errno));
return -1;
}
#endif
@ -562,9 +562,8 @@ int set_socket_df(evutil_socket_t fd, int family, int value) {
}
if (ret < 0) {
int err = socket_errno();
perror("set socket df:");
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: set sockopt failed: fd=%d, err=%d, family=%d\n", __FUNCTION__, fd, err,
family);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: set sockopt failed: fd=%d, err=%d, family=%d. Error: %s\n", __FUNCTION__,
fd, err, family, strerror(errno));
}
}
#elif defined(IPPROTO_IP) && defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DO) && defined(IP_PMTUDISC_DONT) // LINUX
@ -588,8 +587,7 @@ int set_socket_df(evutil_socket_t fd, int family, int value) {
#endif
}
if (ret < 0) {
perror("set DF");
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: set sockopt failed\n", __FUNCTION__);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: set sockopt failed. Error: %s\n", __FUNCTION__, strerror(errno));
}
}
#else
@ -1193,7 +1191,7 @@ void ignore_sigpipe(void) {
#if defined(__linux__) || defined(__APPLE__)
/* Ignore SIGPIPE from TCP sockets */
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
perror("Cannot set SIGPIPE handler");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot set SIGPIPE handler: %s\n", strerror(errno));
}
#endif
}
@ -1239,7 +1237,7 @@ unsigned long set_system_parameters(int max_resources) {
struct rlimit rlim;
if (getrlimit(RLIMIT_NOFILE, &rlim) < 0) {
perror("Cannot get system limit");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot get system limit: %s\n", strerror(errno));
} else {
rlim.rlim_cur = rlim.rlim_max;
while ((setrlimit(RLIMIT_NOFILE, &rlim) < 0) && (rlim.rlim_cur > 0)) {

View File

@ -60,8 +60,9 @@
#endif
#endif
#include <ctype.h> // for tolower
#include <string.h> // for memcmp, strstr, strcmp, strdup, strlen
#include <ctype.h> // for tolower
#include <errno.h>
#include <string.h> // for memcmp, strstr, strcmp, strdup, strlen, strerror
////////// LOG TIME OPTIMIZATION ///////////
@ -96,7 +97,7 @@ int turn_mutex_lock(const turn_mutex *mutex) {
int ret = 0;
ret = pthread_mutex_lock((pthread_mutex_t *)mutex->mutex);
if (ret < 0) {
perror("Mutex lock");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Mutex lock: %s\n", strerror(errno));
}
return ret;
} else {
@ -110,7 +111,7 @@ int turn_mutex_unlock(const turn_mutex *mutex) {
int ret = 0;
ret = pthread_mutex_unlock((pthread_mutex_t *)mutex->mutex);
if (ret < 0) {
perror("Mutex unlock");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Mutex unlock: %s\n", strerror(errno));
}
return ret;
} else {
@ -126,12 +127,12 @@ int turn_mutex_init(turn_mutex *mutex) {
mutex->mutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
if (!(mutex->mutex)) {
perror("Cannot allocate mutex");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot allocate mutex: %s\n", strerror(errno));
return -1;
}
if (pthread_mutex_init((pthread_mutex_t *)mutex->mutex, NULL) != 0) {
perror("Cannot init mutex");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot init mutex: %s\n", strerror(errno));
free(mutex->mutex);
mutex->mutex = NULL;
return -1;
@ -148,23 +149,23 @@ int turn_mutex_init_recursive(turn_mutex *mutex) {
pthread_mutexattr_t attr;
if (pthread_mutexattr_init(&attr) != 0) {
perror("Cannot init mutex attr");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot init mutex attr: %s\n", strerror(errno));
return -1;
}
if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0) {
perror("Cannot set type on mutex attr");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot set type on mutex attr: %s\n", strerror(errno));
return -1;
}
mutex->mutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
if (!(mutex->mutex)) {
perror("Cannot allocate mutex");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot allocate mutex: %s\n", strerror(errno));
return -1;
}
if (pthread_mutex_init((pthread_mutex_t *)mutex->mutex, &attr) != 0) {
perror("Cannot init mutex");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot init mutex: %s\n", strerror(errno));
free(mutex->mutex);
mutex->mutex = NULL;
return -1;

View File

@ -35,6 +35,7 @@
#include "udpserver.h"
#include "apputils.h"
#include "stun_buffer.h"
#include <errno.h>
#include <limits.h> // for USHRT_MAX
@ -93,7 +94,7 @@ static int udp_create_server_socket(server_type *const server, const char *const
evutil_socket_t udp_fd = socket(server_addr->ss.sa_family, RELAY_DGRAM_SOCKET_TYPE, RELAY_DGRAM_SOCKET_PROTOCOL);
if (udp_fd < 0) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "socket: %s\n", strerror(errno));
free(server_addr);
return -1;
}

View File

@ -34,6 +34,7 @@
#include "apputils.h"
#include "mainrelay.h"
#include <errno.h>
#include "dtls_listener.h"
#include "ns_ioalib_impl.h"
@ -497,8 +498,7 @@ static int create_new_connected_udp_socket(dtls_listener_relay_server_type *serv
evutil_socket_t udp_fd = socket(s->local_addr.ss.sa_family, CLIENT_DGRAM_SOCKET_TYPE, CLIENT_DGRAM_SOCKET_PROTOCOL);
if (udp_fd < 0) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: Cannot allocate new socket\n", __FUNCTION__);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: Cannot allocate new socket. Error: %s\n", __FUNCTION__, strerror(errno));
return -1;
}
@ -724,9 +724,7 @@ start_udp_cycle:
if (bsize < 0) {
if (!to_block && !conn_reset) {
const int ern = socket_errno();
perror(__FUNCTION__);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: recvfrom error %d\n", __FUNCTION__, ern);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: recvfrom error %d\n", __FUNCTION__, socket_errno());
}
ioa_network_buffer_delete(server->e, server->sm.m.sm.nd.nbh);
server->sm.m.sm.nd.nbh = NULL;
@ -824,7 +822,7 @@ static int create_server_socket(dtls_listener_relay_server_type *server, int rep
udp_listen_fd = socket(server->addr.ss.sa_family, CLIENT_DGRAM_SOCKET_TYPE, CLIENT_DGRAM_SOCKET_PROTOCOL);
if (udp_listen_fd < 0) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: socket error: %s\n", __FUNCTION__, strerror(errno));
return -1;
}
@ -846,17 +844,18 @@ static int create_server_socket(dtls_listener_relay_server_type *server, int rep
retry_addr_bind:
if (addr_bind(udp_listen_fd, &server->addr, 1, 1, UDP_SOCKET) < 0) {
perror("Cannot bind local socket to addr");
char saddr[MAX_IOA_ADDR_STRING];
addr_to_string(&server->addr, saddr);
TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "Cannot bind DTLS/UDP listener socket to addr %s\n", saddr);
TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "Cannot bind DTLS/UDP listener socket to addr %s. Error: %s\n", saddr,
strerror(errno));
if (addr_bind_cycle++ < max_binding_time) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "Trying to bind DTLS/UDP listener socket to addr %s, again...\n", saddr);
sleep(1);
goto retry_addr_bind;
}
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Fatal final failure: cannot bind DTLS/UDP listener socket to addr %s\n",
saddr);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,
"Fatal final failure: cannot bind DTLS/UDP listener socket to addr %s. Error: %s\n", saddr,
strerror(errno));
exit(-1);
}
}
@ -906,7 +905,7 @@ static int reopen_server_socket(dtls_listener_relay_server_type *server, evutil_
const ioa_socket_raw udp_listen_fd =
socket(server->addr.ss.sa_family, CLIENT_DGRAM_SOCKET_TYPE, CLIENT_DGRAM_SOCKET_PROTOCOL);
if (udp_listen_fd < 0) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: socket error: %s\n", __FUNCTION__, strerror(errno));
FUNCEND;
return -1;
}
@ -919,14 +918,14 @@ static int reopen_server_socket(dtls_listener_relay_server_type *server, evutil_
set_ioa_socket_buf_size(server->udp_listen_s, server->ts->sock_buf_size);
if (sock_bind_to_device(udp_listen_fd, (unsigned char *)server->ifname) < 0) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "Cannot bind listener socket to device %s\n", server->ifname);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot bind listener socket to device %s. Error: %s\n", server->ifname,
strerror(errno));
}
if (addr_bind(udp_listen_fd, &server->addr, 1, 1, UDP_SOCKET) < 0) {
perror("Cannot bind local socket to addr");
char saddr[MAX_IOA_ADDR_STRING];
addr_to_string(&server->addr, saddr);
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "Cannot bind listener socket to addr %s\n", saddr);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot bind local socket to addr %s. Error: %s\n", saddr, strerror(errno));
return -1;
}

View File

@ -33,6 +33,7 @@
*/
#include "mainrelay.h"
#include <errno.h>
#include "dbdrivers/dbdriver.h"
@ -3041,7 +3042,7 @@ static void drop_privileges(void) {
if (procgroupid_set) {
if (getgid() != procgroupid) {
if (setgid(procgroupid) != 0) {
perror("setgid: Unable to change group privileges");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "setgid: Unable to change group privileges: %s\n", strerror(errno));
exit(-1);
} else {
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "New GID: %s(%lu)\n", procgroupname, (unsigned long)procgroupid);
@ -3054,7 +3055,7 @@ static void drop_privileges(void) {
if (procuserid_set) {
if (procuserid != getuid()) {
if (setuid(procuserid) != 0) {
perror("setuid: Unable to change user privileges");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "setuid: Unable to change user privileges: %s\n", strerror(errno));
exit(-1);
} else {
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "New UID: %s(%lu)\n", procusername, (unsigned long)procuserid);
@ -3830,7 +3831,7 @@ static void set_ctx(SSL_CTX **out, const char *protocol, const SSL_METHOD *metho
if (turn_params.dh_file[0]) {
FILE *paramfile = fopen(turn_params.dh_file, "r");
if (!paramfile) {
perror("Cannot open DH file");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot open DH file: %s\n", strerror(errno));
} else {
OSSL_DECODER_CTX *dctx =
OSSL_DECODER_CTX_new_for_pkey(&dh, "PEM", NULL, "DH", EVP_PKEY_KEY_PARAMETERS, NULL, NULL);
@ -3875,7 +3876,7 @@ static void set_ctx(SSL_CTX **out, const char *protocol, const SSL_METHOD *metho
FILE *f = fopen(turn_params.secret_key_file, "r");
if (!f) {
perror("Cannot open Secret-Key file");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot open Secret-Key file: %s\n", strerror(errno));
} else {
fseek(f, 0, SEEK_SET);
rc = fread(turn_params.secret_key, sizeof(char), 16, f);

View File

@ -33,6 +33,7 @@
*/
#include "mainrelay.h"
#include <errno.h>
#include "ns_turn_ioalib.h"
@ -96,7 +97,7 @@ static void barrier_wait_func(const char *func, int line) {
br = pthread_barrier_wait(&barrier);
if ((br < 0) && (br != PTHREAD_BARRIER_SERIAL_THREAD)) {
const int err = socket_errno();
perror("barrier wait");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "barrier wait: %s\n", strerror(errno));
printf("%s:%s:%d: %d\n", __FUNCTION__, func, line, err);
}
} while (((br < 0) && (br != PTHREAD_BARRIER_SERIAL_THREAD)) && socket_eintr());
@ -785,7 +786,7 @@ static int handle_relay_message(relay_server_handle rs, struct message_to_relay
break;
}
default: {
perror("Weird buffer type\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Weird buffer type: %s\n", strerror(errno));
}
}
}
@ -811,7 +812,7 @@ static void relay_receive_message(struct bufferevent *bev, void *ptr) {
while ((n = evbuffer_remove(input, &sm, sizeof(struct message_to_relay))) > 0) {
if (n != sizeof(struct message_to_relay)) {
perror("Weird buffer error\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Weird buffer error: %s\n", strerror(errno));
continue;
}
@ -828,7 +829,7 @@ static void relay_receive_auth_message(struct bufferevent *bev, void *ptr) {
while ((n = evbuffer_remove(input, &am, sizeof(struct auth_message))) > 0) {
if (n != sizeof(struct auth_message)) {
perror("Weird auth_buffer error\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Weird auth_buffer error: %s\n", strerror(errno));
continue;
}
@ -864,12 +865,12 @@ static void listener_receive_message(struct bufferevent *bev, void *ptr) {
while ((n = evbuffer_remove(input, &mm, sizeof(struct message_to_listener))) > 0) {
if (n != sizeof(struct message_to_listener)) {
perror("Weird buffer error\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Weird buffer error: %s\n", strerror(errno));
continue;
}
if (mm.t != LMT_TO_CLIENT) {
perror("Weird buffer type\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Weird buffer type: %s\n", strerror(errno));
continue;
}
@ -1069,7 +1070,7 @@ static void setup_barriers(void) {
#if !defined(TURN_NO_THREAD_BARRIERS)
{
if (pthread_barrier_init(&barrier, NULL, barrier_count) != 0) {
perror("barrier init");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "barrier init: %s\n", strerror(errno));
}
}
@ -1164,7 +1165,7 @@ static void setup_socket_per_endpoint_udp_listener_servers(void) {
++udp_relay_server_index;
pthread_t thr;
if (pthread_create(&thr, NULL, run_udp_listener_thread, turn_params.listener.aux_udp_services[index][0])) {
perror("Cannot create aux listener thread\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot create aux listener thread: %s\n", strerror(errno));
exit(-1);
}
pthread_detach(thr);
@ -1191,7 +1192,7 @@ static void setup_socket_per_endpoint_udp_listener_servers(void) {
++udp_relay_server_index;
pthread_t thr;
if (pthread_create(&thr, NULL, run_udp_listener_thread, turn_params.listener.udp_services[index][0])) {
perror("Cannot create listener thread\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot create listener thread: %s\n", strerror(errno));
exit(-1);
}
pthread_detach(thr);
@ -1210,7 +1211,7 @@ static void setup_socket_per_endpoint_udp_listener_servers(void) {
++udp_relay_server_index;
pthread_t thr;
if (pthread_create(&thr, NULL, run_udp_listener_thread, turn_params.listener.udp_services[index + 1][0])) {
perror("Cannot create listener thread\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot create listener thread: %s\n", strerror(errno));
exit(-1);
}
pthread_detach(thr);
@ -1235,7 +1236,7 @@ static void setup_socket_per_endpoint_udp_listener_servers(void) {
++udp_relay_server_index;
pthread_t thr;
if (pthread_create(&thr, NULL, run_udp_listener_thread, turn_params.listener.dtls_services[index][0])) {
perror("Cannot create listener thread\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot create listener thread: %s\n", strerror(errno));
exit(-1);
}
pthread_detach(thr);
@ -1255,7 +1256,7 @@ static void setup_socket_per_endpoint_udp_listener_servers(void) {
++udp_relay_server_index;
pthread_t thr;
if (pthread_create(&thr, NULL, run_udp_listener_thread, turn_params.listener.dtls_services[index + 1][0])) {
perror("Cannot create listener thread\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot create listener thread: %s\n", strerror(errno));
exit(-1);
}
pthread_detach(thr);
@ -1734,7 +1735,7 @@ static void setup_general_relay_servers(void) {
if (turn_params.general_relay_servers_number > 0 && turn_params.net_engine_version == NEV_UDP_SOCKET_PER_THREAD) {
if (pthread_barrier_init(&relay_setup_barrier, NULL, (unsigned int)get_real_general_relay_servers_number() + 1) !=
0) {
perror("relay_setup_barrier init");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "relay_setup_barrier init: %s\n", strerror(errno));
}
}
#endif
@ -1757,7 +1758,7 @@ static void setup_general_relay_servers(void) {
general_relay_servers[i]->id = (turnserver_id)i;
general_relay_servers[i]->sm = sm;
if (pthread_create(&(general_relay_servers[i]->thr), NULL, run_general_relay_thread, general_relay_servers[i])) {
perror("Cannot create relay thread\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot create relay thread: %s\n", strerror(errno));
exit(-1);
}
pthread_detach(general_relay_servers[i]->thr);
@ -1828,7 +1829,7 @@ static void setup_auth_server(struct auth_server *as) {
pthread_attr_t attr;
if (pthread_attr_init(&attr) || pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) ||
pthread_create(&(as->thr), &attr, run_auth_server_thread, as)) {
perror("Cannot create auth thread\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot create auth thread: %s\n", strerror(errno));
exit(-1);
}
}
@ -1853,7 +1854,7 @@ static void setup_admin_server(void) {
adminserver.verbose = turn_params.verbose;
if (pthread_create(&(adminserver.thr), NULL, run_admin_server_thread, &adminserver)) {
perror("Cannot create cli thread\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot create cli thread: %s\n", strerror(errno));
exit(-1);
}

View File

@ -36,6 +36,7 @@
#include "ns_turn_server.h"
#include "ns_turn_session.h"
#include "ns_turn_utils.h"
#include <errno.h>
#include "apputils.h"
#include "stun_buffer.h"
@ -783,7 +784,7 @@ int set_raw_socket_ttl_options(evutil_socket_t fd, int family) {
#else
int recv_ttl_on = 1;
if (setsockopt(fd, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, (const void *)&recv_ttl_on, sizeof(recv_ttl_on)) < 0) {
perror("cannot set recvhoplimit\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "cannot set recvhoplimit: %s\n", strerror(errno));
}
#endif
} else {
@ -792,7 +793,7 @@ int set_raw_socket_ttl_options(evutil_socket_t fd, int family) {
#else
int recv_ttl_on = 1;
if (setsockopt(fd, IPPROTO_IP, IP_RECVTTL, (const void *)&recv_ttl_on, sizeof(recv_ttl_on)) < 0) {
perror("cannot set recvttl\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "cannot set recvttl: %s\n", strerror(errno));
}
#endif
}
@ -807,7 +808,7 @@ int set_raw_socket_tos_options(evutil_socket_t fd, int family) {
#else
int recv_tos_on = 1;
if (setsockopt(fd, IPPROTO_IPV6, IPV6_RECVTCLASS, (const void *)&recv_tos_on, sizeof(recv_tos_on)) < 0) {
perror("cannot set recvtclass\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "cannot set recvtclass: %s\n", strerror(errno));
}
#endif
} else {
@ -816,7 +817,7 @@ int set_raw_socket_tos_options(evutil_socket_t fd, int family) {
#else
int recv_tos_on = 1;
if (setsockopt(fd, IPPROTO_IP, IP_RECVTOS, (const void *)&recv_tos_on, sizeof(recv_tos_on)) < 0) {
perror("cannot set recvtos\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "cannot set recvtos: %s\n", strerror(errno));
}
#endif
}
@ -836,7 +837,7 @@ int set_socket_options_fd(evutil_socket_t fd, SOCKET_TYPE st, int family) {
so_linger.l_onoff = 1;
so_linger.l_linger = 0;
if (setsockopt(fd, SOL_SOCKET, SO_LINGER, (const void *)&so_linger, sizeof(so_linger)) < 1) {
// perror("setsolinger")
// TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "setsolinger: %s\n", strerror(errno))
;
}
}
@ -854,7 +855,7 @@ int set_socket_options_fd(evutil_socket_t fd, SOCKET_TYPE st, int family) {
on = 1;
#endif
if (setsockopt(fd, IPPROTO_IP, IP_RECVERR, (const void *)&on, sizeof(on)) < 0) {
perror("IP_RECVERR");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "IP_RECVERR: %s\n", strerror(errno));
}
}
#endif
@ -866,7 +867,7 @@ int set_socket_options_fd(evutil_socket_t fd, SOCKET_TYPE st, int family) {
on = 1;
#endif
if (setsockopt(fd, IPPROTO_IPV6, IPV6_RECVERR, (const void *)&on, sizeof(on)) < 0) {
perror("IPV6_RECVERR");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "IPV6_RECVERR: %s\n", strerror(errno));
}
}
#endif
@ -924,14 +925,14 @@ ioa_socket_handle create_unbound_relay_ioa_socket(ioa_engine_handle e, int famil
case UDP_SOCKET:
fd = socket(family, RELAY_DGRAM_SOCKET_TYPE, RELAY_DGRAM_SOCKET_PROTOCOL);
if (fd < 0) {
perror("UDP socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "UDP socket: %s\n", strerror(errno));
return NULL;
}
break;
case TCP_SOCKET:
fd = socket(family, RELAY_STREAM_SOCKET_TYPE, RELAY_STREAM_SOCKET_PROTOCOL);
if (fd < 0) {
perror("TCP socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "TCP socket: %s\n", strerror(errno));
return NULL;
}
break;
@ -1042,7 +1043,7 @@ int create_relay_ioa_sockets(ioa_engine_handle e, ioa_socket_handle client_s, in
}
*rtcp_s = create_unbound_relay_ioa_socket(e, relay_addr.ss.sa_family, UDP_SOCKET, RELAY_RTCP_SOCKET);
if (*rtcp_s == NULL) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "socket: %s\n", strerror(errno));
IOA_CLOSE_SOCKET(*rtp_s);
addr_set_port(&local_addr, port);
turnipports_release(tp, transport, &local_addr);
@ -1091,7 +1092,7 @@ int create_relay_ioa_sockets(ioa_engine_handle e, ioa_socket_handle client_s, in
addr_set_port(&rtcp_local_addr, rtcp_port);
turnipports_release(tp, transport, &rtcp_local_addr);
}
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "socket: %s\n", strerror(errno));
return -1;
}
@ -1293,7 +1294,7 @@ ccs_end:
*/
s->fd = socket(s->family, RELAY_STREAM_SOCKET_TYPE, RELAY_STREAM_SOCKET_PROTOCOL);
if (s->fd < 0) {
perror("TCP socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "TCP socket: %s\n", strerror(errno));
if (ret) {
set_ioa_socket_session(ret, NULL);
IOA_CLOSE_SOCKET(ret);
@ -1565,19 +1566,18 @@ ioa_socket_handle detach_ioa_socket(ioa_socket_handle s) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Detaching NULL socket\n");
} else {
if ((s->magic != SOCKET_MAGIC) || (s->done)) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "!!! %s detach on bad socket: %p, st=%d, sat=%d\n", __FUNCTION__, s, s->st,
s->sat);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "!!! %s socket: %p was closed\n", __FUNCTION__, s);
return ret;
}
if (s->tobeclosed) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "!!! %s detach on tobeclosed socket: %p, st=%d, sat=%d\n", __FUNCTION__, s,
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s detach on bad socket: %p, st=%d, sat=%d. Closed.\n", __FUNCTION__, s,
s->st, s->sat);
return ret;
}
if (s->tobeclosed) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s detach on tobeclosed socket: %p, st=%d, sat=%d\n", __FUNCTION__, s, s->st,
s->sat);
return ret;
}
if (!(s->e)) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "!!! %s detach on socket without engine: %p, st=%d, sat=%d\n", __FUNCTION__,
s, s->st, s->sat);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s detach on socket without engine: %p, st=%d, sat=%d\n", __FUNCTION__, s,
s->st, s->sat);
return ret;
}
@ -1585,8 +1585,8 @@ ioa_socket_handle detach_ioa_socket(ioa_socket_handle s) {
if (s->parent_s) {
if ((s->st != UDP_SOCKET) && (s->st != DTLS_SOCKET)) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "!!! %s detach on non-UDP child socket: %p, st=%d, sat=%d\n", __FUNCTION__,
s, s->st, s->sat);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s detach on non-UDP child socket: %p, st=%d, sat=%d\n", __FUNCTION__, s,
s->st, s->sat);
return ret;
}
}
@ -1596,8 +1596,8 @@ ioa_socket_handle detach_ioa_socket(ioa_socket_handle s) {
if (s->parent_s) {
udp_fd = socket(s->local_addr.ss.sa_family, CLIENT_DGRAM_SOCKET_TYPE, CLIENT_DGRAM_SOCKET_PROTOCOL);
if (udp_fd < 0) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: Cannot allocate new socket\n", __FUNCTION__);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: Cannot allocate new socket. Error: %s\n", __FUNCTION__,
strerror(errno));
return ret;
}
if (sock_bind_to_device(udp_fd, (unsigned char *)(s->e->relay_ifname)) < 0) {
@ -3261,7 +3261,7 @@ int send_data_from_ioa_socket_nbh(ioa_socket_handle s, ioa_addr *dest_addr, ioa_
s->in_write = 1;
if (bufferevent_write(s->bev, ioa_network_buffer_data(nbh), ioa_network_buffer_get_size(nbh)) < 0) {
ret = -1;
perror("bufev send");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "bufev send: %s\n", strerror(errno));
log_socket_event(s, "socket write failed, to be closed", 1);
s->tobeclosed = 1;
s->broken = 1;
@ -3301,7 +3301,7 @@ int send_data_from_ioa_socket_nbh(ioa_socket_handle s, ioa_addr *dest_addr, ioa_
#if defined(EADDRNOTAVAIL)
const int perr = socket_errno();
#endif
perror("udp send");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "udp send: %s\n", strerror(errno));
#if defined(EADDRNOTAVAIL)
if (dest_addr && (perr == EADDRNOTAVAIL)) {
char sfrom[MAX_IOA_ADDR_STRING] = "";
@ -3353,7 +3353,7 @@ int send_data_from_ioa_socket_tcp(ioa_socket_handle s, const void *data, size_t
s->in_write = 1;
if (bufferevent_write(s->bev, data, sz) < 0) {
ret = -1;
perror("bufev send");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "bufev send: %s\n", strerror(errno));
log_socket_event(s, "socket write failed, to be closed", 1);
s->tobeclosed = 1;
s->broken = 1;

View File

@ -34,6 +34,7 @@
#include "apputils.h"
#include "mainrelay.h"
#include <errno.h>
#include "ns_turn_utils.h"
@ -197,7 +198,7 @@ static int create_server_listener(tls_listener_relay_server_type *server) {
tls_listen_fd = socket(server->addr.ss.sa_family, CLIENT_STREAM_SOCKET_TYPE, CLIENT_STREAM_SOCKET_PROTOCOL);
if (tls_listen_fd < 0) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "socket: %s\n", strerror(errno));
return -1;
}
@ -211,7 +212,7 @@ static int create_server_listener(tls_listener_relay_server_type *server) {
retry_addr_bind:
if (addr_bind(tls_listen_fd, &server->addr, 1, 1, TCP_SOCKET) < 0) {
perror("Cannot bind local socket to addr");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot bind local socket to addr: %s\n", strerror(errno));
char saddr[MAX_IOA_ADDR_STRING];
addr_to_string(&server->addr, saddr);
TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "Cannot bind TLS/TCP listener socket to addr %s\n", saddr);

View File

@ -31,6 +31,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -1406,16 +1407,15 @@ void setup_admin_thread(void) {
adminserver.listen_fd = socket(cli_addr.ss.sa_family, ADMIN_STREAM_SOCKET_TYPE, ADMIN_STREAM_SOCKET_PROTOCOL);
if (adminserver.listen_fd < 0) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot open CLI socket\n");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot open CLI socket. Error: %s\n", strerror(errno));
return;
}
if (addr_bind(adminserver.listen_fd, &cli_addr, 1, 1, TCP_SOCKET) < 0) {
perror("Cannot bind CLI socket to addr");
char saddr[MAX_IOA_ADDR_STRING];
addr_to_string(&cli_addr, saddr);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot bind CLI listener socket to addr %s\n", saddr);
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot bind CLI listener socket to addr %s. Error: %s\n", saddr,
strerror(errno));
socket_closesocket(adminserver.listen_fd);
return;
}

View File

@ -36,6 +36,7 @@
#include "ns_turn_ioalib.h" // for ioa_engine_handle
#include "ns_turn_msg.h"
#include "ns_turn_utils.h"
#include <errno.h>
#include "apputils.h"
#include "session.h"
@ -202,7 +203,7 @@ int socket_connect(evutil_socket_t clnet_fd, ioa_addr *remote_addr, int *connect
if (*connect_err == EADDRINUSE) {
return +1;
}
perror("connect");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "connect: %s\n", strerror(errno));
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: cannot connect to remote addr: %d\n", __FUNCTION__, *connect_err);
exit(-1);
}
@ -233,7 +234,7 @@ start_socket:
use_sctp ? SCTP_CLIENT_STREAM_SOCKET_PROTOCOL
: (use_tcp ? CLIENT_STREAM_SOCKET_PROTOCOL : CLIENT_DGRAM_SOCKET_PROTOCOL));
if (clnet_fd < 0) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "socket: %s\n", strerror(errno));
exit(-1);
}
@ -438,7 +439,7 @@ beg_allocate:
}
allocate_sent = 1;
} else {
perror("send");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "send: %s\n", strerror(errno));
exit(1);
}
}
@ -573,7 +574,7 @@ beg_allocate:
/* Try again ? */
}
} else {
perror("recv");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "recv: %s\n", strerror(errno));
exit(-1);
break;
}
@ -696,7 +697,7 @@ beg_allocate:
send_buffer(clnet_info, &request_message, 0, 0);
}
} else {
perror("send");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "send: %s\n", strerror(errno));
exit(1);
}
}
@ -743,7 +744,7 @@ beg_allocate:
/* Try again ? */
}
} else {
perror("recv");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "recv: %s\n", strerror(errno));
exit(-1);
break;
}
@ -785,7 +786,7 @@ beg_bind:
}
cb_sent = true;
} else {
perror("send");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "send: %s\n", strerror(errno));
exit(1);
}
}
@ -834,7 +835,7 @@ beg_bind:
/* Try again ? */
}
} else {
perror("recv");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "recv: %s\n", strerror(errno));
exit(-1);
break;
}
@ -884,7 +885,7 @@ beg_cp:
}
cp_sent = true;
} else {
perror("send");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "send: %s\n", strerror(errno));
exit(1);
}
}
@ -933,7 +934,7 @@ beg_cp:
/* Try again ? */
}
} else {
perror("recv");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "recv: %s\n", strerror(errno));
exit(-1);
}
}
@ -1459,7 +1460,7 @@ int turn_tcp_connect(bool verbose, app_ur_conn_info *clnet_info, ioa_addr *peer_
}
cp_sent = true;
} else {
perror("send");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "send: %s\n", strerror(errno));
exit(1);
}
}
@ -1505,7 +1506,7 @@ beg_cb:
if (errorOK) {
return 0;
}
perror("send");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "send: %s\n", strerror(errno));
exit(1);
}
}
@ -1561,7 +1562,7 @@ beg_cb:
if (errorOK) {
return 0;
}
perror("recv");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "recv: %s\n", strerror(errno));
exit(-1);
}
}
@ -1578,7 +1579,7 @@ again:
clnet_fd = socket(elem->pinfo.remote_addr.ss.sa_family, CLIENT_STREAM_SOCKET_TYPE, CLIENT_STREAM_SOCKET_PROTOCOL);
if (clnet_fd < 0) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "socket: %s\n", strerror(errno));
exit(-1);
}
@ -1617,7 +1618,7 @@ again:
clnet_fd =
socket(elem->pinfo.remote_addr.ss.sa_family, CLIENT_STREAM_SOCKET_TYPE, CLIENT_STREAM_SOCKET_PROTOCOL);
if (clnet_fd < 0) {
perror("socket");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "socket: %s\n", strerror(errno));
exit(-1);
}
if (sock_bind_to_device(clnet_fd, client_ifname) < 0) {
@ -1638,7 +1639,7 @@ again:
continue;
} else {
perror("connect");
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "connect: %s\n", strerror(errno));
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: cannot connect to remote addr\n", __FUNCTION__);
exit(-1);
}