commit 983cf0ec2014e9b8eca8aae60fccefdc1d76d2c3
parent 858eeb9a627173d4a239c14e5c1bd1e51c3d82c2
Author: Remy Noulin <loader2x@gmail.com>
Date: Mon, 10 Jul 2023 21:54:43 +0200
spartan udp: keep server socket open
spartservudp.c | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
Diffstat:
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/spartservudp.c b/spartservudp.c
@@ -81,6 +81,11 @@ int main(int ac, char **av){
slash++;
}
+ sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ if (sock < 0){
+ perror("Failed to create socket");
+ }
+
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(PORT);
@@ -93,28 +98,22 @@ int main(int ac, char **av){
int optval = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const void *)&optval , sizeof(int));
+ if (bind(sock, (struct sockaddr *) &server, sizeof(server))){
+ perror("bind failed");
+ exit(1);
+ }
+ listen(sock, SOMAXCONN);
+
printf("Serving "HOSTNAME":%d %s\n", PORT, root);
// date for request print
char date[50];
do {
- sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if (sock < 0){
- perror("Failed to create socket");
- }
-
- if (bind(sock, (struct sockaddr *) &server, sizeof(server))){
- perror("bind failed");
- exit(1);
- }
- listen(sock, SOMAXCONN);
-
// struct for printing client ip in terminal with inet_ntoa
struct sockaddr_in addr;
socklen_t len = sizeof(addr);
memset(buf, 0, sizeof(buf));
ssize_t r = recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr *) &addr, &len);
- close(sock);
if (r == -1)
perror("recvfrom failed");
else {