diff --git a/src/lib/swim/swim.c b/src/lib/swim/swim.c
index 99f84c76776aa7a08243221908afe909e7836254..db8e2398353c4ddb35d3b327ded9846577eb0a34 100644
--- a/src/lib/swim/swim.c
+++ b/src/lib/swim/swim.c
@@ -1074,8 +1074,7 @@ swim_send_fd_msg(struct swim *swim, struct swim_task *task,
 	assert(map_size == 2);
 	mp_encode_map(header, map_size);
 	say_verbose("SWIM %d: schedule %s to %s", swim_fd(swim),
-		    swim_fd_msg_type_strs[type],
-		    sio_strfaddr((struct sockaddr *) dst, sizeof(*dst)));
+		    swim_fd_msg_type_strs[type], swim_inaddr_str(dst));
 	swim_task_send(task, dst, &swim->scheduler);
 }
 
@@ -1720,9 +1719,7 @@ swim_info(struct swim *swim, struct info_handler *info)
 	     node = mh_next(swim->members, node)) {
 		struct swim_member *m =
 			*mh_swim_table_node(swim->members, node);
-		info_table_begin(info,
-				 sio_strfaddr((struct sockaddr *) &m->addr,
-					      sizeof(m->addr)));
+		info_table_begin(info, swim_inaddr_str(&m->addr));
 		info_append_str(info, "status",
 				swim_member_status_strs[m->status]);
 		info_append_str(info, "uuid", tt_uuid_str(&m->uuid));
@@ -1876,8 +1873,7 @@ swim_iterator_close(struct swim_iterator *iterator)
 const char *
 swim_member_uri(const struct swim_member *member)
 {
-	return sio_strfaddr((const struct sockaddr *) &member->addr,
-			    sizeof(member->addr));
+	return swim_inaddr_str(&member->addr);
 }
 
 const struct tt_uuid *
diff --git a/src/lib/swim/swim_io.c b/src/lib/swim/swim_io.c
index 7d6addf02ff2ca2ca4d1c4221c7e6003d41fae1f..2b310db27b08c6abfb8530e76efc7e8d0464aa7c 100644
--- a/src/lib/swim/swim_io.c
+++ b/src/lib/swim/swim_io.c
@@ -321,8 +321,7 @@ swim_scheduler_on_output(struct ev_loop *loop, struct ev_io *io, int events)
 		rlist_shift_entry(&scheduler->queue_output, struct swim_task,
 				  in_queue_output);
 	say_verbose("SWIM %d: send %s to %s", swim_scheduler_fd(scheduler),
-		    task->desc, sio_strfaddr((struct sockaddr *) &task->dst,
-					     sizeof(task->dst)));
+		    task->desc, swim_inaddr_str(&task->dst));
 	swim_packet_build_meta(&task->packet, &scheduler->transport.addr);
 	int rc = swim_transport_send(&scheduler->transport, task->packet.buf,
 				     task->packet.pos - task->packet.buf,
@@ -353,7 +352,7 @@ swim_scheduler_on_input(struct ev_loop *loop, struct ev_io *io, int events)
 		return;
 	}
 	say_verbose("SWIM %d: received from %s", swim_scheduler_fd(scheduler),
-		    sio_strfaddr((struct sockaddr *) &src, len));
+		    swim_inaddr_str(&src));
 	struct swim_meta_def meta;
 	const char *pos = buf, *end = pos + size;
 	if (swim_meta_def_decode(&meta, &pos, end) < 0)
@@ -363,3 +362,9 @@ swim_scheduler_on_input(struct ev_loop *loop, struct ev_io *io, int events)
 error:
 	diag_log();
 }
+
+const char *
+swim_inaddr_str(const struct sockaddr_in *addr)
+{
+	return sio_strfaddr((struct sockaddr *) addr, sizeof(*addr));
+}
diff --git a/src/lib/swim/swim_io.h b/src/lib/swim/swim_io.h
index 88a7f424dd29e77ce367f6aaaa429d7b21ac27a6..7e48042794938856b34ebdbd1bd479e143d0533a 100644
--- a/src/lib/swim/swim_io.h
+++ b/src/lib/swim/swim_io.h
@@ -286,4 +286,12 @@ struct swim_bcast_task {
 struct swim_bcast_task *
 swim_bcast_task_new(int port, const char *desc);
 
-#endif /* TARANTOOL_SWIM_IO_H_INCLUDED */
\ No newline at end of file
+/**
+ * A wrapper around sio_strfaddr() so as to do not clog SWIM
+ * code with huge casts to 'struct sockaddr *' and passes of
+ * sizeof(struct sockaddr_in).
+ */
+const char *
+swim_inaddr_str(const struct sockaddr_in *addr);
+
+#endif /* TARANTOOL_SWIM_IO_H_INCLUDED */