El 'listen' no es pot fer amb UDP. Ara ja va el select i tot.
Falta implementar recv(), almenys.
--- 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))