Index: uspace/lib/c/generic/inet.c
===================================================================
--- uspace/lib/c/generic/inet.c	(revision c76e9267a192002d0dc6f41f5e2984b3599ac46c)
+++ uspace/lib/c/generic/inet.c	(revision ecff3d9a17c6c882ad241671cff1a314da4c4f16)
@@ -75,4 +75,5 @@
 {
 	service_id_t inet_svc;
+	int rc;
 
 	assert(inet_sess == NULL);
@@ -80,6 +81,9 @@
 	assert(inet_protocol == 0);
 
-	inet_svc = loc_service_get_id(SERVICE_NAME_INET, &inet_svc,
+	rc = loc_service_get_id(SERVICE_NAME_INET, &inet_svc,
 	    IPC_FLAG_BLOCKING);
+	if (rc != EOK)
+		return ENOENT;
+
 	inet_sess = loc_service_connect(EXCHANGE_SERIALIZE, inet_svc,
 	    IPC_FLAG_BLOCKING);
@@ -107,10 +111,39 @@
 int inet_send(inet_dgram_t *dgram, uint8_t ttl, inet_df_t df)
 {
-	return ENOTSUP;
+	async_exch_t *exch = async_exchange_begin(inet_sess);
+
+	ipc_call_t answer;
+	aid_t req = async_send_5(exch, INET_SEND, dgram->src.ipv4,
+	    dgram->dest.ipv4, dgram->tos, ttl, df, &answer);
+	int rc = async_data_write_start(exch, dgram->data, dgram->size);
+	async_exchange_end(exch);
+
+	if (rc != EOK) {
+		async_wait_for(req, NULL);
+		return rc;
+	}
+
+	sysarg_t retval;
+	async_wait_for(req, &retval);
+	if (retval != EOK)
+		return retval;
+
+	return EOK;
 }
 
 int inet_get_srcaddr(inet_addr_t *remote, uint8_t tos, inet_addr_t *local)
 {
-	return ENOTSUP;
+	sysarg_t local_addr;
+	async_exch_t *exch = async_exchange_begin(inet_sess);
+
+	int rc = async_req_1_1(exch, INET_GET_SRCADDR, remote->ipv4,
+	    &local_addr);
+	async_exchange_end(exch);
+
+	if (rc != EOK)
+		return rc;
+
+	local->ipv4 = local_addr;
+	return EOK;
 }
 
Index: uspace/lib/c/include/ipc/inet.h
===================================================================
--- uspace/lib/c/include/ipc/inet.h	(revision c76e9267a192002d0dc6f41f5e2984b3599ac46c)
+++ uspace/lib/c/include/ipc/inet.h	(revision ecff3d9a17c6c882ad241671cff1a314da4c4f16)
@@ -40,4 +40,5 @@
 typedef enum {
 	INET_CALLBACK_CREATE = IPC_FIRST_USER_METHOD,
+	INET_GET_SRCADDR,
 	INET_SEND,
 	INET_SET_PROTO
Index: uspace/srv/inet/inet.c
===================================================================
--- uspace/srv/inet/inet.c	(revision c76e9267a192002d0dc6f41f5e2984b3599ac46c)
+++ uspace/srv/inet/inet.c	(revision ecff3d9a17c6c882ad241671cff1a314da4c4f16)
@@ -44,4 +44,5 @@
 #include <loc.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <sys/types.h>
 
@@ -99,8 +100,45 @@
 }
 
+static void inet_get_srcaddr(inet_client_t *client, ipc_callid_t callid,
+    ipc_call_t *call)
+{
+	log_msg(LVL_DEBUG, "inet_get_srcaddr()");
+
+	async_answer_0(callid, ENOTSUP);
+}
+
 static void inet_send(inet_client_t *client, ipc_callid_t callid,
     ipc_call_t *call)
 {
+	uint32_t src_ipv4;
+	uint32_t dest_ipv4;
+	uint8_t tos;
+	uint8_t ttl;
+	int df;
+	void *data;
+	size_t size;
+	int rc;
+
 	log_msg(LVL_DEBUG, "inet_send()");
+
+	src_ipv4 = IPC_GET_ARG1(*call);
+	dest_ipv4 = IPC_GET_ARG2(*call);
+	tos = IPC_GET_ARG3(*call);
+	ttl = IPC_GET_ARG4(*call);
+	df = IPC_GET_ARG5(*call);
+
+	(void)src_ipv4;
+	(void)dest_ipv4;
+	(void)tos;
+	(void)ttl;
+	(void)df;
+
+	rc = async_data_write_accept(&data, false, 0, 0, 0, &size);
+	if (rc != EOK) {
+		async_answer_0(callid, rc);
+		return;
+	}
+
+	free(data);
 	async_answer_0(callid, ENOTSUP);
 }
@@ -168,4 +206,7 @@
 			inet_callback_create(&client, callid, &call);
 			break;
+		case INET_GET_SRCADDR:
+			inet_get_srcaddr(&client, callid, &call);
+			break;
 		case INET_SEND:
 			inet_send(&client, callid, &call);
@@ -197,4 +238,5 @@
 		return 1;
 
+	printf(NAME ": Accepting connections.\n");
 	task_retval(0);
 	async_manager();
Index: uspace/srv/tcp/tcp.c
===================================================================
--- uspace/srv/tcp/tcp.c	(revision c76e9267a192002d0dc6f41f5e2984b3599ac46c)
+++ uspace/srv/tcp/tcp.c	(revision ecff3d9a17c6c882ad241671cff1a314da4c4f16)
@@ -186,10 +186,14 @@
 
 	rc = inet_init(42, &tcp_inet_ev_ops);
-	if (rc != EOK)
+	if (rc != EOK) {
+		log_msg(LVL_ERROR, "Failed connecting to internet service.");
 		return ENOENT;
+	}
 
 	rc = tcp_sock_init();
-	if (rc != EOK)
+	if (rc != EOK) {
+		log_msg(LVL_ERROR, "Failed initializing socket service.");
 		return ENOENT;
+	}
 
 	return EOK;
@@ -208,5 +212,9 @@
 	}
 
-	tcp_init();
+	rc = tcp_init();
+	if (rc != EOK)
+		return 1;
+
+	printf(NAME ": Accepting connections.\n");
 	task_retval(0);
 	async_manager();
