summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDon Ward <don2387ward@sprynet.com>2010-04-15 14:37:04 -0400
committerDon Ward <don2387ward@sprynet.com>2010-04-15 14:37:04 -0400
commitb0d32c6c20cadaa544aeaa7b5257919674e8d0ad (patch)
tree13704558b96d78a8bb5523ece3bde49d62dc9aca
parent213f8bcef70281a52bab02d2a9e7868749530c3c (diff)
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.
-rwxr-xr-x[-rw-r--r--]gnuradio-core/src/lib/io/gr_udp_sink.cc6
-rwxr-xr-x[-rw-r--r--]gnuradio-core/src/lib/io/gr_udp_source.cc6
2 files changed, 8 insertions, 4 deletions
diff --git a/gnuradio-core/src/lib/io/gr_udp_sink.cc b/gnuradio-core/src/lib/io/gr_udp_sink.cc
index d37adfb8a8..a837e731ea 100644..100755
--- 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
index d76d0ee32f..fed5b61422 100644..100755
--- 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