[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r4284 - gnuradio/branches/developers/trondeau/ethernet
From: |
trondeau |
Subject: |
[Commit-gnuradio] r4284 - gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io |
Date: |
Wed, 17 Jan 2007 14:42:28 -0700 (MST) |
Author: trondeau
Date: 2007-01-17 14:42:28 -0700 (Wed, 17 Jan 2007)
New Revision: 4284
Modified:
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_ethernet_sink.cc
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_ethernet_source.cc
Log:
added error handling
Modified:
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_ethernet_sink.cc
===================================================================
---
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_ethernet_sink.cc
2007-01-16 22:56:03 UTC (rev 4283)
+++
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_ethernet_sink.cc
2007-01-17 21:42:28 UTC (rev 4284)
@@ -84,43 +84,39 @@
{
omni_mutex_lock l(d_mutex); // hold mutex for duration of this function
- int ret = 0;
- bool OptVal = true;
- int OptLen = sizeof(bool);
- int LngrLen = sizeof(linger);
+ // create socket
+ if(d_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) == NULL) {
+ perror("socket open");
+ throw std::runtime_error("can't open socket");
+ }
+
+ // Turn on reuse address
+ bool opt_val = true;
+ if(setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, (void*)&opt_val,
sizeof(int))) {
+ perror("SO_REUSEADDR");
+ throw std::runtime_error("can't set socket option SO_REUSEADDR");
+ }
+
+ // Don't wait when shutting down
linger lngr;
lngr.l_onoff = 1;
lngr.l_linger = 0;
+ if(setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (void*)&lngr,
sizeof(linger))) {
+ perror("SO_LINGER");
+ throw std::runtime_error("can't set socket option SO_LINGER");
+ }
- // create socket
- d_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- ret = setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, (char*)&OptVal, OptLen);
- ret = setsockopt(d_socket, SO_LINGER, SO_REUSEADDR, (char*)&lngr, LngrLen);
-
// bind socket to an address and port number to listen on
- ret = bind(d_socket, (sockaddr*)&d_sockaddr_local, sizeof(struct sockaddr));
-
- #if SNK_VERBOSE
- if(!ret) {
- fprintf(stderr, "Source: bind address succeeded.\n");
+ if(bind (d_socket, (sockaddr*)&d_sockaddr_local, sizeof(struct sockaddr))) {
+ perror("socket bind");
+ throw std::runtime_error("can't bind socket");
}
- else {
- fprintf(stderr, "Source: bind address failed.\n");
- exit(ret);
- }
- #endif
- ret = connect(d_socket, (sockaddr*)&d_sockaddr_remote, sizeof(struct
sockaddr));
-
- #if SNK_VERBOSE
- if(!ret) {
- fprintf(stderr, "Source: connection succeeded.\n");
+ // Not sure if we should throw here or allow retries
+ if(connect(d_socket, (sockaddr*)&d_sockaddr_remote, sizeof(struct
sockaddr))) {
+ perror("socket connect");
+ throw std::runtime_error("can't connect to socket");
}
- else {
- fprintf(stderr, "Source: connection failed.\n");
- exit(ret);
- }
- #endif
d_updated = true;
return d_socket != 0;
@@ -149,7 +145,7 @@
while(bytes_sent < total_size) {
bytes_to_send = (bytes_sent+d_mtu < total_size ? d_mtu :
total_size-bytes_sent);
- bytes =send(d_socket, (in+bytes_sent), bytes_to_send, 0);
+ bytes =send(d_socket, (in+bytes_sent), bytes_to_send, MSG_DONTWAIT);
bytes_sent += bytes;
}
Modified:
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_ethernet_source.cc
===================================================================
---
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_ethernet_source.cc
2007-01-16 22:56:03 UTC (rev 4283)
+++
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_ethernet_source.cc
2007-01-17 21:42:28 UTC (rev 4284)
@@ -70,38 +70,44 @@
{
omni_mutex_lock l(d_mutex); // hold mutex for duration of this function
- int ret = 0;
-
// create socket
d_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ if(d_socket == 0) {
+ perror("socket open");
+ throw std::runtime_error("can't open socket");
+ }
// Turn on reuse address
bool opt_val = true;
- ret = setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, (void*)&opt_val,
sizeof(bool));
+ if(setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, (void*)&opt_val,
sizeof(int))) {
+ perror("SO_REUSEADDR");
+ throw std::runtime_error("can't set socket option SO_REUSEADDR");
+ }
// Don't wait when shutting down
linger lngr;
lngr.l_onoff = 1;
lngr.l_linger = 0;
- ret = setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (void*)&lngr,
sizeof(linger));
+ if(setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (void*)&lngr,
sizeof(linger))) {
+ 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
+ // This value can (and probably should) be changed
timeval timeout;
timeout.tv_sec = 1;
timeout.tv_usec = 0;
- ret = setsockopt(d_socket, SOL_SOCKET, SO_RCVTIMEO, (void*)&timeout,
sizeof(timeout));
+ if(setsockopt(d_socket, SOL_SOCKET, SO_RCVTIMEO, (void*)&timeout,
sizeof(timeout))) {
+ perror("SO_RCVTIMEO");
+ throw std::runtime_error("can't set socket option SO_RCVTIMEO");
+ }
// bind socket to an address and port number to listen on
- ret = bind (d_socket, (sockaddr*)&d_sockaddr_local, sizeof(struct sockaddr));
- #if SRC_VERBOSE
- if(!ret) {
- fprintf(stderr, "Sink: bind address succeeded\n");
+ if(bind (d_socket, (sockaddr*)&d_sockaddr_local, sizeof(struct sockaddr))) {
+ perror("socket bind");
+ throw std::runtime_error("can't bind socket");
}
- else {
- fprintf(stderr, "Sink: bind failed (%d).\n", ret);
- exit(ret);
- }
- #endif
d_updated = true;
return d_socket != 0;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4284 - gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io,
trondeau <=