about summary refs log tree commit diff stats
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/src/main.c b/src/main.c
index 0264050..302f6bf 100644
--- a/src/main.c
+++ b/src/main.c
@@ -10,6 +10,7 @@
 #include <netdb.h>
 #include <pthread.h>
 #include <sys/types.h>
+#include <sys/time.h>
 #include <pwd.h>
 #include <grp.h>
 #include <errno.h>
@@ -112,25 +113,19 @@ int main(int argc, char **argv) {
 		syslog(LOG_ERR, "unable to bind socket!");
 		return -1;
 	}
+	struct timeval timeout = { 1, 0 };
+	if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0) {
+		syslog(LOG_ERR, "unable to set socket timeout: %s", strerror(errno));
+		close(s);
+		return -1;
+	}
 	struct sockaddr_in saddr;
 	saddr.sin_family = AF_INET;
 	saddr.sin_port = htons(port);
 	saddr.sin_addr.s_addr = inet_addr(addr);
 
 	if (bind(s, (struct sockaddr*)&saddr, sizeof(saddr)) < 0) {
-		switch (errno) {
-			case EACCES:
-				syslog(LOG_ERR, "socket bind failed: permission denied");
-				break;
-			case EADDRINUSE:
-				syslog(LOG_ERR, "socket bind failed: address already in use");
-				break;
-			case EADDRNOTAVAIL:
-				syslog(LOG_ERR, "socket bind failed: address not available");
-				break;
-			default:
-				syslog(LOG_ERR, "socket bind failed");
-		}
+		syslog(LOG_ERR, "socket bind failed: %s", strerror(errno));
 		return -1;
 	}
 	syslog(LOG_INFO, "socket bind success");
@@ -164,10 +159,6 @@ int main(int argc, char **argv) {
 		ssize_t recvd_bytes = 0;
 		if ((recvd_bytes = recvfrom(s, buf, 1024, 0, 
 				(struct sockaddr *)&caddr, &clen)) < 0) {
-			syslog(
-				LOG_ERR,
-				"got a client connection, but unable to receive data!"
-			);
 			continue;
 		}
 		if (recvd_bytes < 4) {