1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-10 17:59:04 +00:00

Implementation of UNIX-domain sockets for Nsock.

Implementation of UNIX-domain sockets functionality
for Nsock. Also some minor necessary changes to
existing Nsock functions, to work properly with
UNIX-domain sockets.
This commit is contained in:
david
2012-11-12 20:44:37 +00:00
parent c5f632382f
commit f01e3800fb
11 changed files with 221 additions and 48 deletions

View File

@@ -76,6 +76,16 @@
#include <sys/time.h>
#endif
#if HAVE_SYS_UN_H
#include <sys/un.h>
#ifndef SUN_LEN
#include <string.h>
# define SUN_LEN(ptr) (sizeof(*(ptr)) - sizeof((ptr)->sun_path)) \
+ strlen ((ptr)->sun_path))
#endif
#endif /* HAVE_SYS_UN_H */
#ifdef __cplusplus
extern "C" {
#endif
@@ -423,6 +433,24 @@ typedef void (*nsock_ev_handler)(nsock_pool, nsock_event, void *);
/* Initialize an unconnected UDP socket. */
int nsock_setup_udp(nsock_pool nsp, nsock_iod ms_iod, int af);
#if HAVE_SYS_UN_H
/* Request a UNIX domain sockets connection to the same system (by path to socket).
* This function connects to the socket of type SOCK_STREAM. ss should be a
* sockaddr_storage, sockaddr_un as appropriate (just like what you would pass to
* connect). sslen should be the sizeof the structure you are passing in. */
nsock_event_id nsock_connect_unixsock_stream(nsock_pool nsp, nsock_iod nsiod, nsock_ev_handler handler,
int timeout_msecs, void *userdata, struct sockaddr *ss,
size_t sslen);
/* Request a UNIX domain sockets connection to the same system (by path to socket).
* This function connects to the socket of type SOCK_DGRAM. ss should be a
* sockaddr_storage, sockaddr_un as appropriate (just like what you would pass to
* connect). sslen should be the sizeof the structure you are passing in. */
nsock_event_id nsock_connect_unixsock_datagram(nsock_pool nsp, nsock_iod nsiod, nsock_ev_handler handler,
void *userdata, struct sockaddr *ss, size_t sslen);
#endif /* HAVE_SYS_UN_H */
/* Request a TCP connection to another system (by IP address). The in_addr is
* normal network byte order, but the port number should be given in HOST BYTE
* ORDER. ss should be a sockaddr_storage, sockaddr_in6, or sockaddr_in as

View File

@@ -75,6 +75,9 @@
#undef HAVE_NET_BPF_H
#undef HAVE_SYS_IOCTL_H
/* Define to 1 if you have the <sys/un.h> header file. */
#undef HAVE_SYS_UN_H
#undef HAVE_SSL_SET_TLSEXT_HOST_NAME
#undef HAVE_EPOLL

2
nsock/src/configure vendored
View File

@@ -4533,7 +4533,7 @@ $as_echo "#define STDC_HEADERS 1" >>confdefs.h
fi
for ac_header in net/bpf.h sys/ioctl.h
for ac_header in net/bpf.h sys/ioctl.h sys/un.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"

View File

@@ -140,7 +140,7 @@ AC_CHECK_FUNC(nanosleep, , AC_CHECK_LIB(posix4, nanosleep))
dnl Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(net/bpf.h sys/ioctl.h)
AC_CHECK_HEADERS(net/bpf.h sys/ioctl.h sys/un.h)
# We test whether they specified openssl desires explicitly
use_openssl="yes"

View File

@@ -83,6 +83,9 @@
#if HAVE_FCNTL_H
#include <fcntl.h>
#endif
#if HAVE_SYS_UN_H
#include <sys/un.h>
#endif
static int netutils_debugging = 0;
@@ -134,3 +137,35 @@ int maximize_fdlimit(void) {
return 0;
}
#if HAVE_SYS_UN_H
/* Get the UNIX domain socket path or empty string if the address family != AF_UNIX. */
const char *get_unixsock_path(struct sockaddr_storage *addr)
{
if (!addr || addr->ss_family != AF_UNIX)
return "";
struct sockaddr_un *su = (struct sockaddr_un *)addr;
return (const char *)su->sun_path;
}
#endif
/* Get the peer/host address string.
* In case we have support for UNIX domain sockets, function returns
* string containing path to UNIX socket if the address family is AF_UNIX,
* otherwise it returns string containing "<address>:<port>". */
char *get_hostaddr_string(struct sockaddr_storage *addr, size_t len, unsigned short port)
{
static char buffer[PEER_STR_LEN];
if (!addr)
return "";
#if HAVE_SYS_UN_H
if (addr->ss_family == AF_UNIX)
sprintf(buffer, "%s", get_unixsock_path(addr));
else
#endif
sprintf(buffer, "%s:%hu", inet_ntop_ez(addr, len), port);
return buffer;
}

View File

@@ -63,17 +63,42 @@
#include "nbase_config.h"
#endif
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef WIN32
#include "nbase_winconfig.h"
/* nbase_winunix.h somehow reason.h to get included */
#include "nbase_winunix.h"
#endif
#if HAVE_SYS_UN_H
#include <sys/un.h>
#endif
#if HAVE_SYS_UN_H
#define PEER_STR_LEN sizeof(((struct sockaddr_un *) 0)->sun_path)
#else
#define PEER_STR_LEN sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255:xxxxx")
#endif
/* Maximize the number of file descriptors (including sockets) allowed for this
* process and return that maximum value (note -- you better not actually open
* this many -- stdin, stdout, other files opened by libraries you use, etc. all
* count toward this limit. Leave a little slack */
int maximize_fdlimit(void);
#if HAVE_SYS_UN_H
/* Get the UNIX domain socket path or NULL if the socket family != AF_UNIX. */
const char *get_unixsock_path(struct sockaddr_storage *addr);
#endif
/* Get the peer/host address string.
* In case we have support for UNIX domain sockets, function returns
* string containing path to UNIX socket if the address family is AF_UNIX,
* otherwise it returns string containing "<address>:<port>". */
char *get_hostaddr_string(struct sockaddr_storage *addr, size_t len, unsigned short port);
#endif /* NETUTILS_H */

View File

@@ -67,9 +67,9 @@
* broadcast flag. Trying to change these functions after making this call will
* not have an effect. This function needs to be called before you try to read
* or write on the iod. */
static int nsock_make_socket(mspool *ms, msiod *iod, int family, int proto) {
static int nsock_make_socket(mspool *ms, msiod *iod, int family, int type, int proto) {
/* inheritable_socket is from nbase */
iod->sd = (int)inheritable_socket(family, (proto == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM, proto);
iod->sd = (int)inheritable_socket(family, type, proto);
if (iod->sd == -1) {
perror("Socket troubles");
return -1;
@@ -84,9 +84,17 @@ static int nsock_make_socket(mspool *ms, msiod *iod, int family, int proto) {
setsockopt(iod->sd, SOL_SOCKET, SO_REUSEADDR, (const char *)&one, sizeof(one));
if (bind(iod->sd, (struct sockaddr *)&iod->local, (int) iod->locallen) == -1) {
if (ms->tracelevel > 0)
nsock_trace(ms, "Bind to %s failed (IOD #%li)",
inet_ntop_ez(&iod->local, iod->locallen), iod->id);
if (ms->tracelevel > 0) {
const char *addrstr = NULL;
#if HAVE_SYS_UN_H
if (iod->local.ss_family == AF_UNIX)
addrstr = get_unixsock_path(&iod->local);
else
#endif
addrstr = inet_ntop_ez(&iod->local, iod->locallen);
nsock_trace(ms, "Bind to %s failed (IOD #%li)", addrstr, iod->id);
}
}
}
if (iod->ipoptslen && family == AF_INET) {
@@ -122,7 +130,7 @@ int nsock_setup_udp(nsock_pool nsp, nsock_iod ms_iod, int af) {
if (ms->tracelevel > 0)
nsock_trace(ms, "UDP unconnected socket (IOD #%li)", nsi->id);
if (nsock_make_socket(ms, nsi, af, IPPROTO_UDP) == -1)
if (nsock_make_socket(ms, nsi, af, SOCK_DGRAM, IPPROTO_UDP) == -1)
return -1;
return nsi->sd;
@@ -130,7 +138,7 @@ int nsock_setup_udp(nsock_pool nsp, nsock_iod ms_iod, int af) {
/* This does the actual logistics of requesting a TCP connection. It is shared
* by nsock_connect_tcp and nsock_connect_ssl */
void nsock_connect_internal(mspool *ms, msevent *nse, int proto, struct sockaddr_storage *ss, size_t sslen,
void nsock_connect_internal(mspool *ms, msevent *nse, int type, int proto, struct sockaddr_storage *ss, size_t sslen,
unsigned short port) {
struct sockaddr_in *sin = (struct sockaddr_in *)ss;
@@ -140,15 +148,19 @@ void nsock_connect_internal(mspool *ms, msevent *nse, int proto, struct sockaddr
msiod *iod = nse->iod;
/* Now it is time to actually attempt the connection */
if (nsock_make_socket(ms, iod, ss->ss_family, proto) == -1) {
if (nsock_make_socket(ms, iod, ss->ss_family, type, proto) == -1) {
nse->event_done = 1;
nse->status = NSE_STATUS_ERROR;
nse->errnum = socket_errno();
} else {
if (sin->sin_family == AF_INET) {
if (ss->ss_family == AF_INET) {
sin->sin_port = htons(port);
#if HAVE_SYS_UN_H
} else if (ss->ss_family == AF_INET6) {
#else
} else {
assert(sin->sin_family == AF_INET6);
#endif
assert(ss->ss_family == AF_INET6);
#if HAVE_IPV6
sin6->sin6_port = htons(port);
#else
@@ -174,6 +186,62 @@ void nsock_connect_internal(mspool *ms, msevent *nse, int proto, struct sockaddr
}
}
#if HAVE_SYS_UN_H
/* Request a UNIX domain sockets connection to the same system (by path to socket).
* This function connects to the socket of type SOCK_STREAM. ss should be a
* sockaddr_storage, sockaddr_un as appropriate (just like what you would pass to
* connect). sslen should be the sizeof the structure you are passing in. */
nsock_event_id nsock_connect_unixsock_stream(nsock_pool nsp, nsock_iod nsiod, nsock_ev_handler handler, int timeout_msecs,
void *userdata, struct sockaddr *saddr, size_t sslen) {
msiod *nsi = (msiod *)nsiod;
mspool *ms = (mspool *)nsp;
msevent *nse;
struct sockaddr_storage *ss = (struct sockaddr_storage *)saddr;
assert(nsi->state == NSIOD_STATE_INITIAL || nsi->state == NSIOD_STATE_UNKNOWN);
nse = msevent_new(ms, NSE_TYPE_CONNECT, nsi, timeout_msecs, handler, userdata);
assert(nse);
if (ms->tracelevel > 0)
nsock_trace(ms, "UNIX domain socket (STREAM) connection requested to %s (IOD #%li) EID %li",
get_unixsock_path(ss), nsi->id, nse->id);
nsock_connect_internal(ms, nse, SOCK_STREAM, 0, ss, sslen, 0);
nsp_add_event(ms, nse);
return nse->id;
}
/* Request a UNIX domain sockets connection to the same system (by path to socket).
* This function connects to the socket of type SOCK_DGRAM. ss should be a
* sockaddr_storage, sockaddr_un as appropriate (just like what you would pass to
* connect). sslen should be the sizeof the structure you are passing in. */
nsock_event_id nsock_connect_unixsock_datagram(nsock_pool nsp, nsock_iod nsiod, nsock_ev_handler handler,
void *userdata, struct sockaddr *saddr, size_t sslen) {
msiod *nsi = (msiod *)nsiod;
mspool *ms = (mspool *)nsp;
msevent *nse;
struct sockaddr_storage *ss = (struct sockaddr_storage *)saddr;
assert(nsi->state == NSIOD_STATE_INITIAL || nsi->state == NSIOD_STATE_UNKNOWN);
nse = msevent_new(ms, NSE_TYPE_CONNECT, nsi, -1, handler, userdata);
assert(nse);
if (ms->tracelevel > 0)
nsock_trace(ms, "UNIX domain socket (DGRAM) connection requested to %s (IOD #%li) EID %li",
get_unixsock_path(ss), nsi->id, nse->id);
nsock_connect_internal(ms, nse, SOCK_DGRAM, 0, ss, sslen, 0);
nsp_add_event(ms, nse);
return nse->id;
}
#endif /* HAVE_SYS_UN_H */
/* Request a TCP connection to another system (by IP address). The in_addr is
* normal network byte order, but the port number should be given in HOST BYTE
@@ -198,7 +266,7 @@ nsock_event_id nsock_connect_tcp(nsock_pool nsp, nsock_iod ms_iod, nsock_ev_hand
inet_ntop_ez(ss, sslen), port, nsi->id, nse->id);
/* Do the actual connect() */
nsock_connect_internal(ms, nse, IPPROTO_TCP, ss, sslen, port);
nsock_connect_internal(ms, nse, SOCK_STREAM, IPPROTO_TCP, ss, sslen, port);
nsp_add_event(ms, nse);
return nse->id;
@@ -227,7 +295,7 @@ nsock_event_id nsock_connect_sctp(nsock_pool nsp, nsock_iod ms_iod, nsock_ev_han
inet_ntop_ez(ss, sslen), port, nsi->id, nse->id);
/* Do the actual connect() */
nsock_connect_internal(ms, nse, IPPROTO_SCTP, ss, sslen, port);
nsock_connect_internal(ms, nse, SOCK_STREAM, IPPROTO_SCTP, ss, sslen, port);
nsp_add_event(ms, nse);
return nse->id;
@@ -269,7 +337,7 @@ nsock_event_id nsock_connect_ssl(nsock_pool nsp, nsock_iod nsiod, nsock_ev_handl
inet_ntop_ez(ss, sslen), port, (proto == IPPROTO_TCP ? "tcp" : "sctp"), nsi->id, nse->id);
/* Do the actual connect() */
nsock_connect_internal(ms, nse, proto, ss, sslen, port);
nsock_connect_internal(ms, nse, SOCK_STREAM, proto, ss, sslen, port);
nsp_add_event(ms, nse);
return nse->id;
@@ -342,7 +410,7 @@ nsock_event_id nsock_connect_udp(nsock_pool nsp, nsock_iod nsiod, nsock_ev_handl
if (ms->tracelevel > 0)
nsock_trace(ms, "UDP connection requested to %s:%hu (IOD #%li) EID %li", inet_ntop_ez(ss, sslen), port, nsi->id, nse->id);
nsock_connect_internal(ms, nse, IPPROTO_UDP, ss, sslen, port);
nsock_connect_internal(ms, nse, SOCK_DGRAM, IPPROTO_UDP, ss, sslen, port);
nsp_add_event(ms, nse);
return nse->id;
@@ -378,7 +446,7 @@ int nsi_getlastcommunicationinfo(nsock_iod ms_iod, int *protocol, int *af, struc
if (*protocol == -1) res = 0;
}
if (af) {
*af = ((struct sockaddr_in *)&nsi->peer)->sin_family;
*af = nsi->peer.ss_family;
}
if (local) {
if (nsi->sd >= 0) {

View File

@@ -476,7 +476,7 @@ void handle_connect_result(mspool *ms, msevent *nse, enum nse_status status) {
saved_ev = iod->watched_events;
ms->engine->iod_unregister(ms, iod);
close(iod->sd);
nsock_connect_internal(ms, nse, iod->lastproto, &iod->peer, iod->peerlen, nsi_peerport(iod));
nsock_connect_internal(ms, nse, SOCK_STREAM, iod->lastproto, &iod->peer, iod->peerlen, nsi_peerport(iod));
ms->engine->iod_register(ms, iod, saved_ev);
SSL_clear(iod->ssl);
@@ -1272,18 +1272,19 @@ void nsock_trace_handler_callback(mspool *ms, msevent *nse) {
switch(nse->type) {
case NSE_TYPE_CONNECT:
case NSE_TYPE_CONNECT_SSL:
nsock_trace(ms, "Callback: %s %s %sfor EID %li [%s:%d]",
nse_type2str(nse->type), nse_status2str(nse->status), errstr,
nse->id, inet_ntop_ez(&nsi->peer, nsi->peerlen), nsi_peerport(nsi));
nsock_trace(ms, "Callback: %s %s %sfor EID %li [%s]",
nse_type2str(nse->type), nse_status2str(nse->status),
errstr, nse->id, get_hostaddr_string(&nsi->peer,
nsi->peerlen, (unsigned short)nsi_peerport(nsi)));
break;
case NSE_TYPE_READ:
if (nse->status != NSE_STATUS_SUCCESS) {
if (nsi->peerlen > 0) {
nsock_trace(ms, "Callback: %s %s %sfor EID %li [%s:%d]",
nsock_trace(ms, "Callback: %s %s %sfor EID %li [%s]",
nse_type2str(nse->type), nse_status2str(nse->status),
errstr, nse->id, inet_ntop_ez(&nsi->peer, nsi->peerlen),
nsi_peerport(nsi));
errstr, nse->id, get_hostaddr_string(&nsi->peer,
nsi->peerlen, (unsigned short)nsi_peerport(nsi)));
} else {
nsock_trace(ms, "Callback: %s %s %sfor EID %li (peer unspecified)",
nse_type2str(nse->type), nse_status2str(nse->status),
@@ -1301,11 +1302,11 @@ void nsock_trace_handler_callback(mspool *ms, msevent *nse) {
}
if (nsi->peerlen > 0) {
nsock_trace(ms, "Callback: %s %s for EID %li [%s:%d] %s(%d bytes)%s",
nsock_trace(ms, "Callback: %s %s for EID %li [%s] %s(%d bytes)%s",
nse_type2str(nse->type), nse_status2str(nse->status),
nse->id, inet_ntop_ez(&nsi->peer, nsi->peerlen),
nsi_peerport(nsi), nse_eof(nse)? "[EOF]" : "", strlength,
displaystr);
nse->id, get_hostaddr_string(&nsi->peer, nsi->peerlen,
(unsigned short)nsi_peerport(nsi)),
nse_eof(nse)? "[EOF]" : "", strlength, displaystr);
} else {
nsock_trace(ms, "Callback %s %s for EID %li (peer unspecified) %s(%d bytes)%s",
nse_type2str(nse->type), nse_status2str(nse->status),
@@ -1315,10 +1316,10 @@ void nsock_trace_handler_callback(mspool *ms, msevent *nse) {
break;
case NSE_TYPE_WRITE:
nsock_trace(ms, "Callback: %s %s %sfor EID %li [%s:%d]",
nsock_trace(ms, "Callback: %s %s %sfor EID %li [%s]",
nse_type2str(nse->type), nse_status2str(nse->status), errstr,
nse->id, inet_ntop_ez(&nsi->peer, nsi->peerlen),
nsi_peerport(nsi));
nse->id, get_hostaddr_string(&nsi->peer, nsi->peerlen,
(unsigned short)nsi_peerport(nsi)));
break;
case NSE_TYPE_TIMER:

View File

@@ -97,6 +97,9 @@
#if HAVE_STRINGS_H
#include <strings.h>
#endif
#if HAVE_SYS_UN_H
#include <sys/un.h>
#endif
#ifndef IPPROTO_SCTP
#define IPPROTO_SCTP 132
@@ -255,7 +258,8 @@ typedef struct {
struct sockaddr_storage local;
/* The length of peer/local actually used (sizeof(sockaddr_in) or
* sizeof(sockaddr_in6), or 0 if peer/local has not been filled in */
* sizeof(sockaddr_in6), SUN_LEN(sockaddr_un), or 0 if peer/local
* has not been filled in */
size_t locallen;
size_t peerlen;
@@ -424,7 +428,7 @@ void msevent_delete(mspool *nsp, msevent *nse);
* etc. */
void nsp_add_event(mspool *nsp, msevent *nse);
void nsock_connect_internal(mspool *ms, msevent *nse, int proto, struct sockaddr_storage *ss, size_t sslen, unsigned short port);
void nsock_connect_internal(mspool *ms, msevent *nse, int type, int proto, struct sockaddr_storage *ss, size_t sslen, unsigned short port);
/* Comments on using the following handle_*_result functions are available in nsock_core.c */

View File

@@ -74,8 +74,9 @@ nsock_event_id nsock_readlines(nsock_pool nsp, nsock_iod ms_iod, nsock_ev_handle
if (ms->tracelevel > 0) {
if (nsi->peerlen > 0)
nsock_trace(ms, "Read request for %d lines from IOD #%li [%s:%d] EID %li",
nlines, nsi->id, inet_ntop_ez(&nsi->peer, nsi->peerlen), nsi_peerport(nsi), nse->id);
nsock_trace(ms, "Read request for %d lines from IOD #%li [%s] EID %li",
nlines, nsi->id, get_hostaddr_string(&nsi->peer, nsi->peerlen, (unsigned short)nsi_peerport(nsi)),
nse->id);
else
nsock_trace(ms, "Read request for %d lines from IOD #%li (peer unspecified) EID %li",
nlines, nsi->id, nse->id);
@@ -102,8 +103,9 @@ nsock_event_id nsock_readbytes(nsock_pool nsp, nsock_iod ms_iod, nsock_ev_handle
if (ms->tracelevel > 0) {
if (nsi->peerlen > 0)
nsock_trace(ms, "Read request for %d bytes from IOD #%li [%s:%d] EID %li",
nbytes, nsi->id, inet_ntop_ez(&nsi->peer, nsi->peerlen), nsi_peerport(nsi), nse->id);
nsock_trace(ms, "Read request for %d bytes from IOD #%li [%s] EID %li",
nbytes, nsi->id, get_hostaddr_string(&nsi->peer, nsi->peerlen, (unsigned short)nsi_peerport(nsi)),
nse->id);
else
nsock_trace(ms, "Read request for %d bytes from IOD #%li (peer unspecified) EID %li",
nbytes, nsi->id, nse->id);
@@ -130,8 +132,9 @@ nsock_event_id nsock_read(nsock_pool nsp, nsock_iod ms_iod, nsock_ev_handler han
if (ms->tracelevel > 0) {
if (nsi->peerlen > 0)
nsock_trace(ms, "Read request from IOD #%li [%s:%d] (timeout: %dms) EID %li",
nsi->id, inet_ntop_ez(&nsi->peer, nsi->peerlen), nsi_peerport(nsi), timeout_msecs, nse->id);
nsock_trace(ms, "Read request from IOD #%li [%s] (timeout: %dms) EID %li",
nsi->id, get_hostaddr_string(&nsi->peer, nsi->peerlen, (unsigned short)nsi_peerport(nsi)),
timeout_msecs, nse->id);
else
nsock_trace(ms, "Read request from IOD #%li (peer unspecified) (timeout: %dms) EID %li",
nsi->id, timeout_msecs, nse->id);

View File

@@ -76,10 +76,14 @@ nsock_event_id nsock_sendto(nsock_pool ms_pool, nsock_iod ms_iod, nsock_ev_handl
nse = msevent_new(nsp, NSE_TYPE_WRITE, nsi, timeout_msecs, handler, userdata);
assert(nse);
if (sin->sin_family == AF_INET) {
if (saddr->sa_family == AF_INET) {
sin->sin_port = htons(port);
#if HAVE_SYS_UN_H
} else if (saddr->sa_family == AF_INET6) {
#else
} else {
assert(sin->sin_family == AF_INET6);
#endif
assert(saddr->sa_family == AF_INET6);
#if HAVE_IPV6
sin6->sin6_port = htons(port);
#else
@@ -107,9 +111,9 @@ nsock_event_id nsock_sendto(nsock_pool ms_pool, nsock_iod ms_iod, nsock_ev_handl
} else {
displaystr[0] = '\0';
}
nsock_trace(nsp, "Sendto request for %d bytes to IOD #%li EID %li [%s:%hu]%s",
nsock_trace(nsp, "Sendto request for %d bytes to IOD #%li EID %li [%s]%s",
datalen, nsi->id, nse->id,
inet_ntop_ez(&nse->writeinfo.dest, nse->writeinfo.destlen), port,
get_hostaddr_string(&nse->writeinfo.dest, nse->writeinfo.destlen, port),
displaystr);
}
@@ -147,8 +151,9 @@ nsock_event_id nsock_write(nsock_pool ms_pool, nsock_iod ms_iod,
replacenonprintable(displaystr + 2, datalen, '.');
} else displaystr[0] = '\0';
if (nsi->peerlen > 0)
nsock_trace(nsp, "Write request for %d bytes to IOD #%li EID %li [%s:%d]%s", datalen, nsi->id,
nse->id, inet_ntop_ez(&nsi->peer, nsi->peerlen), nsi_peerport(nsi), displaystr);
nsock_trace(nsp, "Write request for %d bytes to IOD #%li EID %li [%s]%s", datalen, nsi->id,
nse->id, get_hostaddr_string(&nsi->peer, nsi->peerlen, (unsigned short)nsi_peerport(nsi)),
displaystr);
else
nsock_trace(nsp, "Write request for %d bytes to IOD #%li EID %li (peer unspecified)%s", datalen,
nsi->id, nse->id, displaystr);
@@ -220,8 +225,9 @@ nsock_event_id nsock_printf(nsock_pool ms_pool, nsock_iod ms_iod,
displaystr[0] = '\0';
}
if (nsi->peerlen > 0)
nsock_trace(nsp, "Write request for %d bytes to IOD #%li EID %li [%s:%d]%s", strlength, nsi->id,
nse->id, inet_ntop_ez(&nsi->peer, nsi->peerlen), nsi_peerport(nsi), displaystr);
nsock_trace(nsp, "Write request for %d bytes to IOD #%li EID %li [%s]%s", strlength, nsi->id,
nse->id, get_hostaddr_string(&nsi->peer, nsi->peerlen, (unsigned short)nsi_peerport(nsi)),
displaystr);
else
nsock_trace(nsp, "Write request for %d bytes to IOD #%li EID %li (peer unspecified)%s", strlength,
nsi->id, nse->id, displaystr);