From b0d32c6c20cadaa544aeaa7b5257919674e8d0ad Mon Sep 17 00:00:00 2001 From: Don Ward Date: Thu, 15 Apr 2010 14:37:04 -0400 Subject: Ignore ENOPROTOOPT return from setsockopt(SO_LINGER) SO_LINGER is not valid for SOCK_DGRAM sockets on Windows, so we expect setsockopt to return ENOPROTOOPT (invalid option for protocol) on Cygwin and MinGW. If it happens on any other system it should probably be ignored there, too. --- gnuradio-core/src/lib/io/gr_udp_sink.cc | 6 ++++-- gnuradio-core/src/lib/io/gr_udp_source.cc | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) mode change 100644 => 100755 gnuradio-core/src/lib/io/gr_udp_sink.cc mode change 100644 => 100755 gnuradio-core/src/lib/io/gr_udp_source.cc diff --git a/gnuradio-core/src/lib/io/gr_udp_sink.cc b/gnuradio-core/src/lib/io/gr_udp_sink.cc old mode 100644 new mode 100755 index d37adfb8a..a837e731e --- a/gnuradio-core/src/lib/io/gr_udp_sink.cc +++ b/gnuradio-core/src/lib/io/gr_udp_sink.cc @@ -132,8 +132,10 @@ gr_udp_sink::open() lngr.l_onoff = 1; lngr.l_linger = 0; if(setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (optval_t)&lngr, sizeof(linger)) == -1) { - perror("SO_LINGER"); - throw std::runtime_error("can't set socket option SO_LINGER"); + if(errno != ENOPROTOOPT) { // no SO_LINGER for SOCK_DGRAM on Windows + perror("SO_LINGER"); + throw std::runtime_error("can't set socket option SO_LINGER"); + } } // bind socket to an address and port number to listen on diff --git a/gnuradio-core/src/lib/io/gr_udp_source.cc b/gnuradio-core/src/lib/io/gr_udp_source.cc old mode 100644 new mode 100755 index d76d0ee32..fed5b6142 --- a/gnuradio-core/src/lib/io/gr_udp_source.cc +++ b/gnuradio-core/src/lib/io/gr_udp_source.cc @@ -110,8 +110,10 @@ gr_udp_source::open() lngr.l_onoff = 1; lngr.l_linger = 0; if(setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (optval_t)&lngr, sizeof(linger)) == -1) { - perror("SO_LINGER"); - throw std::runtime_error("can't set socket option SO_LINGER"); + if(errno != ENOPROTOOPT) { // no SO_LINGER for SOCK_DGRAM on Windows + perror("SO_LINGER"); + throw std::runtime_error("can't set socket option SO_LINGER"); + } } // Set a timeout on the receive function to not block indefinitely -- cgit