diff options
| -rw-r--r-- | include/osmocom/core/endian.h | 11 | ||||
| -rw-r--r-- | src/stats.c | 14 | 
2 files changed, 24 insertions, 1 deletions
| diff --git a/include/osmocom/core/endian.h b/include/osmocom/core/endian.h index c890fd72..02c6406d 100644 --- a/include/osmocom/core/endian.h +++ b/include/osmocom/core/endian.h @@ -23,6 +23,17 @@          #else                  #error "Unknown endian"          #endif +#elif defined(__APPLE__) +#include <machine/endian.h> +	#if defined(__DARWIN_LITTLE_ENDIAN) +		#define OSMO_IS_LITTLE_ENDIAN		1 +		#define OSMO_IS_BIG_ENDIAN		0 +	#elif define(__DARWIN_BIG_ENDIAN) +		#define OSMO_IS_LITTLE_ENDIAN		0 +		#define OSMO_IS_BIG_ENDIAN		1 +	#else +		#error "Unknown endian" +	#endif  #else  #include <endian.h>          #if __BYTE_ORDER == __LITTLE_ENDIAN diff --git a/src/stats.c b/src/stats.c index 73b27033..5f1d028b 100644 --- a/src/stats.c +++ b/src/stats.c @@ -301,6 +301,14 @@ int osmo_stats_reporter_udp_open(struct osmo_stats_reporter *srep)  	if (sock == -1)  		return -errno; +#if defined(__APPLE__) && !defined(MSG_NOSIGNAL) +	{ +		static int val = 1; + +		rc = setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, (void*)&val, sizeof(val)); +		goto failed; +	} +#endif  	if (srep->bind_addr_len > 0) {  		rc = bind(sock, &srep->bind_addr, srep->bind_addr_len);  		if (rc == -1) @@ -345,7 +353,11 @@ int osmo_stats_reporter_send(struct osmo_stats_reporter *srep, const char *data,  {  	int rc; -	rc = sendto(srep->fd, data, data_len, MSG_NOSIGNAL | MSG_DONTWAIT, +	rc = sendto(srep->fd, data, data_len, +#ifdef MSG_NOSIGNAL +		MSG_NOSIGNAL | +#endif +		MSG_DONTWAIT,  		&srep->dest_addr, srep->dest_addr_len);  	if (rc == -1) | 
