Index: uspace/app/netecho/netecho.c
===================================================================
--- uspace/app/netecho/netecho.c	(revision bfe6366b503e89ea8b18a3f41ae3149dbeed9ec1)
+++ uspace/app/netecho/netecho.c	(revision 3750c06428b4ba95ea285a82dee88eabc20ab249)
@@ -38,5 +38,5 @@
  */
 
-#include <malloc.h>
+#include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -221,9 +221,8 @@
  * @return		EOK on success or negative error code.
  */
-static int netecho_socket_echo_message(int listening_id)
+static int netecho_socket_process_message(int listening_id)
 {
-	socklen_t max_length = sizeof(struct sockaddr_in6);
-	uint8_t address_data[max_length];
-	struct sockaddr *address = (struct sockaddr *) address_data;
+	uint8_t address_buf[sizeof(struct sockaddr_in6)];
+
 	socklen_t addrlen;
 	int socket_id;
@@ -231,13 +230,16 @@
 	size_t length;
 	uint8_t *address_start;
-	struct sockaddr_in *address_in = (struct sockaddr_in *) address;
-	struct sockaddr_in6 *address_in6 = (struct sockaddr_in6 *) address;
+
 	char address_string[INET6_ADDRSTRLEN];
+	struct sockaddr_in *address_in = (struct sockaddr_in *) address_buf;
+	struct sockaddr_in6 *address_in6 = (struct sockaddr_in6 *) address_buf;
+	struct sockaddr *address = (struct sockaddr *) address_buf;
+
 	int rc;
 
-	addrlen = (socklen_t) max_length;
 	if (type == SOCK_STREAM) {
-		/* Accept a socket if the stream socket is used */
-		socket_id = accept(listening_id, address, &addrlen);
+		/* Accept a socket if a stream socket is used */
+		addrlen = sizeof(address_buf);
+            	socket_id = accept(listening_id, (void *) address_buf, &addrlen);
 		if (socket_id <= 0) {
 			socket_print_error(stderr, socket_id, "Socket accept: ", "\n");
@@ -246,4 +248,6 @@
 				printf("Socket %d accepted\n", socket_id);
 		}
+
+		assert((size_t) addrlen <= sizeof(address_buf));
 	} else {
 		socket_id = listening_id;
@@ -254,5 +258,6 @@
 
 		/* Receive a message to echo */
-		rcv_size = recvfrom(socket_id, data, size, 0, address, &addrlen);
+		rcv_size = recvfrom(socket_id, data, size, 0, address,
+		    &addrlen);
 		if (rcv_size < 0) {
 			socket_print_error(stderr, rcv_size, "Socket receive: ", "\n");
@@ -312,10 +317,9 @@
 int main(int argc, char *argv[])
 {
-	socklen_t max_length = sizeof(struct sockaddr_in6);
-	uint8_t address_data[max_length];
-	struct sockaddr *address = (struct sockaddr *) address_data;
-	struct sockaddr_in *address_in = (struct sockaddr_in *) address;
-	struct sockaddr_in6 *address_in6 = (struct sockaddr_in6 *) address;
+	struct sockaddr *address;;
+	struct sockaddr_in address_in;
+	struct sockaddr_in6 address_in6;
 	socklen_t addrlen;
+
 	int listening_id;
 	int index;
@@ -351,15 +355,16 @@
 
 	/* Prepare the address buffer */
-	bzero(address_data, max_length);
 	switch (family) {
 	case PF_INET:
-		address_in->sin_family = AF_INET;
-		address_in->sin_port = htons(port);
-		addrlen = sizeof(struct sockaddr_in);
+		address_in.sin_family = AF_INET;
+		address_in.sin_port = htons(port);
+		address = (struct sockaddr *) &address_in;
+		addrlen = sizeof(address_in);
 		break;
 	case PF_INET6:
-		address_in6->sin6_family = AF_INET6;
-		address_in6->sin6_port = htons(port);
-		addrlen = sizeof(struct sockaddr_in6);
+		address_in6.sin6_family = AF_INET6;
+		address_in6.sin6_port = htons(port);
+		address = (struct sockaddr *) &address_in6;
+		addrlen = sizeof(address_in6);
 		break;
 	default:
@@ -406,5 +411,5 @@
 	 */
 	while (count) {
-		rc = netecho_socket_echo_message(listening_id);
+		rc = netecho_socket_process_message(listening_id);
 		if (rc != EOK)
 			break;
@@ -414,5 +419,5 @@
 			count--;
 			if (verbose)
-				printf("Waiting for next %d packet(s)\n", count);
+				printf("Waiting for next %d message(s)\n", count);
 		}
 	}
