El 'listen' no es pot fer amb UDP. Ara ja va el select i tot.
authorviric@llimona
Sun, 26 Mar 2006 21:12:49 +0200
changeset 4 f74ca12a5a41
parent 3 9bcdce466e88
child 5 2e2e16e59af9
El 'listen' no es pot fer amb UDP. Ara ja va el select i tot. Falta implementar recv(), almenys.
syslog_in_udp.c
--- a/syslog_in_udp.c	Sun Mar 26 20:44:16 2006 +0200
+++ b/syslog_in_udp.c	Sun Mar 26 21:12:49 2006 +0200
@@ -71,12 +71,14 @@
 		sizeof(source_ipv6));
 	assert(result == 0);
 
+	/*
 	result = listen(socket_ipv6, const_listen_queue);
 	if (result != 0)
 	{
 		printf("Error in listen() ipv6: %s\n", strerror(errno));
 		abort();
 	}
+	*/
 
 	return socket_ipv6;
 }
@@ -114,12 +116,14 @@
 		sizeof(source_ipv4));
 	assert(result == 0);
 
+	/*
 	result = listen(socket_ipv4, const_listen_queue);
 	if (result != 0)
 	{
 		printf("Error in listen() ipv4: %s\n", strerror(errno));
 		abort();
 	}
+	*/
 
 	return socket_ipv4;
 }
@@ -134,17 +138,9 @@
 	int high_socket;
 
 
+	socket_ipv4 = listen_ipv4(port);
 	socket_ipv6 = listen_ipv6(port);
-	socket_ipv4 = listen_ipv4(port);
 
-	/* Establim els FDs que volem esperar al select() */
-	FD_ZERO(&listen_sockets);
-	FD_SET(socket_ipv6, &listen_sockets);
-	FD_SET(socket_ipv4, &listen_sockets);
-
-	/* Establim el temporitzador pel select() */
-	wait_time.tv_sec = 5;
-	wait_time.tv_usec = 0;
 
 	/* Mirem quin és el socket més alt pel select() */
 	high_socket = socket_ipv6;
@@ -154,8 +150,17 @@
 	high_socket += 1;
 	
 	result = 0;
-	while (result)
+	while (result >= 0)
 	{
+		/* Establim els FDs que volem esperar al select() */
+		FD_ZERO(&listen_sockets);
+		FD_SET(socket_ipv6, &listen_sockets);
+		FD_SET(socket_ipv4, &listen_sockets);
+
+		/* Establim el temporitzador pel select() */
+		wait_time.tv_sec = 5;
+		wait_time.tv_usec = 0;
+
 		result = select(high_socket, &listen_sockets, NULL, NULL,
 			&wait_time);
 		if (result == 0)
@@ -170,7 +175,7 @@
 		if (FD_ISSET(socket_ipv4, &listen_sockets))
 		{
 			/* Dummy */
-			printf("Got data in IPv4\n");
+			printf("Got data in IPv4: \n");
 		}
 
 		if (FD_ISSET(socket_ipv6, &listen_sockets))