From 52eb87b7c3354d075a652c1e51eca884605a7600 Mon Sep 17 00:00:00 2001
From: Pawit Pornkitprasan
Date: Mon, 29 Apr 2024 12:18:36 +0900
Subject: [PATCH] receiver: network: add error checking
Add error checking to make network failures visible, such as
trying to binding to a port that is already in-use by another
process.
---
Receivers/unix/network.c | 20 ++++++++++++++++----
Receivers/unix/scream.c | 4 +++-
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/Receivers/unix/network.c b/Receivers/unix/network.c
index e6b4585..a95a627 100644
--- a/Receivers/unix/network.c
+++ b/Receivers/unix/network.c
@@ -1,23 +1,35 @@
#include "network.h"
+#include "stdio.h"
static rctx_network_t rctx_network;
int init_network(enum receiver_type receiver_mode, in_addr_t interface, int port, char* multicast_group)
{
- rctx_network.sockfd = socket(AF_INET,SOCK_DGRAM,0);
+ rctx_network.sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (rctx_network.sockfd < 0) {
+ perror("Failed to craete socket");
+ return 1;
+ }
memset((void *)&(rctx_network.servaddr), 0, sizeof(rctx_network.servaddr));
rctx_network.servaddr.sin_family = AF_INET;
rctx_network.servaddr.sin_addr.s_addr = (receiver_mode == Unicast) ? interface : htonl(INADDR_ANY);
rctx_network.servaddr.sin_port = htons(port);
- bind(rctx_network.sockfd, (struct sockaddr *)&rctx_network.servaddr, sizeof(rctx_network.servaddr));
+
+ if (bind(rctx_network.sockfd, (struct sockaddr *)&rctx_network.servaddr, sizeof(rctx_network.servaddr)) != 0) {
+ perror("Failed to bind to interface");
+ return 1;
+ }
if (receiver_mode == Multicast) {
rctx_network.imreq.imr_multiaddr.s_addr = inet_addr(multicast_group ? multicast_group : DEFAULT_MULTICAST_GROUP);
rctx_network.imreq.imr_interface.s_addr = interface;
- setsockopt(rctx_network.sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
- (const void *)&rctx_network.imreq, sizeof(struct ip_mreq));
+ if (setsockopt(rctx_network.sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
+ (const void *)&rctx_network.imreq, sizeof(struct ip_mreq)) != 0) {
+ perror("Failed to join multicast group");
+ return 1;
+ };
}
return 0;
diff --git a/Receivers/unix/scream.c b/Receivers/unix/scream.c
index 591a1a4..cf09c49 100644
--- a/Receivers/unix/scream.c
+++ b/Receivers/unix/scream.c
@@ -314,7 +314,9 @@ int main(int argc, char*argv[]) {
case Multicast:
default:
if (verbosity) fprintf(stderr, "Starting %s receiver\n", receiver_mode == Unicast ? "unicast" : "multicast");
- init_network(receiver_mode, interface, port, multicast_group);
+ if (init_network(receiver_mode, interface, port, multicast_group) != 0) {
+ return 1;
+ }
receiver_rcv_fn = rcv_network;
break;
}