diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c
index 484f2c4..294bb34 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.c
+++ b/gst-libs/gst/rtsp/gstrtspconnection.c
@@ -1444,6 +1444,64 @@ gst_rtsp_connection_write (GstRTSPConnection * conn, const guint8 * data,
   return res;
 }
 
+/**
+ * gst_rtsp_connection_write_vectors:
+ * @conn: a #GstRTSPConnection
+ * @vecs: the vectors to write
+ * @num_vecs: the number of @vecs
+ *
+ * Attempt to write @num_vecs number of @vecs to the connected @conn.
+ *
+ * Returns: #GST_RTSP_OK on success.
+ */
+GstRTSPResult
+gst_rtsp_connection_write_vectors (GstRTSPConnection * conn,
+    GOutputVector * vecs, guint num_vecs)
+{
+  GError *err = NULL;
+  guint i = 0;
+  guint send_len;
+  gssize num_written = 0;
+  GSocket *socket;
+
+  g_return_val_if_fail (vecs != NULL, GST_RTSP_EINVAL);
+
+  socket = gst_rtsp_connection_get_write_socket (conn);
+  if (socket == NULL) {
+    GST_DEBUG ("failed to retrieve write socket from connection %p", conn);
+    return GST_RTSP_ERROR;
+  }
+
+  while (i < num_vecs) {
+    send_len = MIN (num_vecs - i, UIO_MAXIOV);
+
+    //g_socket_set_blocking (socket, FALSE);
+    if ((num_written = g_socket_send_message (socket, NULL, &vecs[i],
+          send_len, NULL, 0, G_SOCKET_MSG_NONE, NULL, &err)) < 0) {
+      if ((num_written == -1) && g_error_matches (err, G_IO_ERROR,
+            G_IO_ERROR_WOULD_BLOCK)) {
+        GST_ERROR ("GOT EWOULDBLOCK");
+      }
+      GST_DEBUG ("%s", err->message);
+      g_clear_error (&err);
+      return GST_RTSP_ERROR;
+    }
+
+    /* recalculate to deal with partial writes */
+    while (num_written > 0) {
+      if (num_written < vecs[i].size) {
+        vecs[i].buffer = (gchar *) vecs[i].buffer + num_written;
+        vecs[i].size -= num_written;
+        num_written = 0;
+      } else {
+        num_written -= vecs[i].size;
+        ++i;
+      }
+    }
+  }
+  return GST_RTSP_OK;
+}
+
 static GString *
 message_to_string (GstRTSPConnection * conn, GstRTSPMessage * message)
 {
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.h b/gst-libs/gst/rtsp/gstrtspconnection.h
index 11e0ac8..940b788 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.h
+++ b/gst-libs/gst/rtsp/gstrtspconnection.h
@@ -129,7 +129,11 @@ GstRTSPResult      gst_rtsp_connection_send           (GstRTSPConnection *conn,
 GST_EXPORT
 GstRTSPResult      gst_rtsp_connection_receive        (GstRTSPConnection *conn, GstRTSPMessage *message,
                                                        GTimeVal *timeout);
+/* sending messages on the connection write socket without blocking */
 
+GST_EXPORT
+GstRTSPResult      gst_rtsp_connection_write_vectors  (GstRTSPConnection * conn, GOutputVector * vecs,
+                                                       guint num_vecs);
 /* status management */
 
 GST_EXPORT
diff --git a/tests/check/libs/rtspconnection.c b/tests/check/libs/rtspconnection.c
index d24fd54..721f829 100644
--- a/tests/check/libs/rtspconnection.c
+++ b/tests/check/libs/rtspconnection.c
@@ -29,6 +29,7 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <string.h>
+#include <stdio.h>
 
 
 static const gchar *get_msg =
@@ -666,6 +667,39 @@ GST_START_TEST (test_rtspconnection_send_receive_check_headers)
 
 GST_END_TEST;
 
+GST_START_TEST (test_rtspconnection_write_vectors)
+{
+  GSocketConnection *input_conn = NULL;
+  GSocketConnection *output_conn = NULL;
+  GSocket *output_sock;
+  GstRTSPConnection *rtsp_output_conn;
+  gint i;
+  guint num_vecs = 10000;
+  GOutputVector vecs[10000] = { { NULL, }, };
+
+  create_connection (&input_conn, &output_conn);
+  output_sock = g_socket_connection_get_socket (output_conn);
+  fail_unless (output_sock != NULL);
+
+  fail_unless (gst_rtsp_connection_create_from_socket (output_sock, "127.0.0.1",
+        4444, NULL, &rtsp_output_conn) == GST_RTSP_OK);
+
+  for (i = 0; i < num_vecs; i++) {
+    vecs[i].buffer = " ";
+    vecs[i].size = 1200;
+  }
+
+  /* write the vectors */
+  fail_unless (gst_rtsp_connection_write_vectors (rtsp_output_conn, vecs,
+        num_vecs) == GST_RTSP_OK);
+
+  fail_unless (gst_rtsp_connection_free (rtsp_output_conn) == GST_RTSP_OK);
+  g_object_unref (input_conn);
+  g_object_unref (output_conn);
+}
+
+GST_END_TEST;
+
 GST_START_TEST (test_rtspconnection_connect)
 {
   ServiceData *data;
@@ -873,6 +907,7 @@ rtspconnection_suite (void)
   tcase_add_test (tc_chain, test_rtspconnection_tunnel_setup_post_first);
   tcase_add_test (tc_chain, test_rtspconnection_send_receive);
   tcase_add_test (tc_chain, test_rtspconnection_send_receive_check_headers);
+  tcase_add_test (tc_chain, test_rtspconnection_write_vectors);
   tcase_add_test (tc_chain, test_rtspconnection_connect);
   tcase_add_test (tc_chain, test_rtspconnection_poll);
   tcase_add_test (tc_chain, test_rtspconnection_backlog);
