[hamradio-commits] [dump1090] 295/389: B"H view1090: handle disconnection
Matthew Ernisse
mernisse-guest at moszumanska.debian.org
Wed Nov 5 00:20:07 UTC 2014
This is an automated email from the git hooks/post-receive script.
mernisse-guest pushed a commit to branch master
in repository dump1090.
commit 96015e38c895db145937b756beb78a4e7fb497aa
Author: hhm <heehooman+vcs-ci at gmail.com>
Date: Wed Jul 2 07:38:46 2014 -0400
B"H view1090: handle disconnection
- keep trying to reconnect to server if disconnected
---
view1090.c | 58 ++++++++++++++++++++++++++++++++++++++--------------------
view1090.h | 2 ++
2 files changed, 40 insertions(+), 20 deletions(-)
diff --git a/view1090.c b/view1090.c
index 4830bca..59498be 100644
--- a/view1090.c
+++ b/view1090.c
@@ -115,6 +115,33 @@ void view1090Init(void) {
// Prepare error correction tables
modesInitErrorInfo();
}
+
+// Set up data connection
+int setupConnection(struct client *c) {
+ int fd;
+
+ // Try to connect to the selected ip address and port. We only support *ONE* input connection which we initiate.here.
+ if ((fd = anetTcpConnect(Modes.aneterr, View1090.net_input_beast_ipaddr, Modes.net_input_beast_port)) != ANET_ERR) {
+ //
+ // Setup a service callback client structure for a beast binary input (from dump1090)
+ // This is a bit dodgy under Windows. The fd parameter is a handle to the internet
+ // socket on which we are receiving data. Under Linux, these seem to start at 0 and
+ // count upwards. However, Windows uses "HANDLES" and these don't nececeriy start at 0.
+ // dump1090 limits fd to values less than 1024, and then uses the fd parameter to
+ // index into an array of clients. This is ok-ish if handles are allocated up from 0.
+ // However, there is no gaurantee that Windows will behave like this, and if Windows
+ // allocates a handle greater than 1024, then dump1090 won't like it. On my test machine,
+ // the first Windows handle is usually in the 0x54 (84 decimal) region.
+
+ c->next = NULL;
+ c->buflen = 0;
+ c->fd =
+ c->service =
+ Modes.bis = fd;
+ Modes.clients = c;
+ }
+ return fd;
+}
//
// ================================ Main ====================================
//
@@ -181,6 +208,7 @@ void showCopyright(void) {
int main(int argc, char **argv) {
int j, fd;
struct client *c;
+ char pk_buf[8];
// Set sane defaults
@@ -244,34 +272,24 @@ int main(int argc, char **argv) {
view1090Init();
// Try to connect to the selected ip address and port. We only support *ONE* input connection which we initiate.here.
- if ((fd = anetTcpConnect(Modes.aneterr, View1090.net_input_beast_ipaddr, Modes.net_input_beast_port)) == ANET_ERR) {
+ c = (struct client *) malloc(sizeof(*c));
+ if ((fd = setupConnection(c)) == ANET_ERR) {
fprintf(stderr, "Failed to connect to %s:%d\n", View1090.net_input_beast_ipaddr, Modes.net_input_beast_port);
exit(1);
}
- //
- // Setup a service callback client structure for a beast binary input (from dump1090)
- // This is a bit dodgy under Windows. The fd parameter is a handle to the internet
- // socket on which we are receiving data. Under Linux, these seem to start at 0 and
- // count upwards. However, Windows uses "HANDLES" and these don't nececeriy start at 0.
- // dump1090 limits fd to values less than 1024, and then uses the fd parameter to
- // index into an array of clients. This is ok-ish if handles are allocated up from 0.
- // However, there is no gaurantee that Windows will behave like this, and if Windows
- // allocates a handle greater than 1024, then dump1090 won't like it. On my test machine,
- // the first Windows handle is usually in the 0x54 (84 decimal) region.
-
- c = (struct client *) malloc(sizeof(*c));
- c->next = NULL;
- c->buflen = 0;
- c->fd =
- c->service =
- Modes.bis = fd;
- Modes.clients = c;
// Keep going till the user does something that stops us
while (!Modes.exit) {
- modesReadFromClient(c,"",decodeBinMessage);
interactiveRemoveStaleAircrafts();
interactiveShowData();
+ if ((fd == ANET_ERR) || (recv(c->fd, pk_buf, sizeof(pk_buf), MSG_PEEK | MSG_DONTWAIT) == 0)) {
+ free(c);
+ usleep(1000000);
+ c = (struct client *) malloc(sizeof(*c));
+ fd = setupConnection(c);
+ continue;
+ }
+ modesReadFromClient(c,"",decodeBinMessage);
}
// The user has stopped us, so close any socket we opened
diff --git a/view1090.h b/view1090.h
index c4c97fe..03ad96d 100644
--- a/view1090.h
+++ b/view1090.h
@@ -49,6 +49,8 @@
#include <fcntl.h>
#include <ctype.h>
#include <sys/stat.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
#include "rtl-sdr.h"
#include "anet.h"
#else
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/dump1090.git
More information about the pkg-hamradio-commits
mailing list