Index: /trunk/include/iprt/mangling.h
===================================================================
--- /trunk/include/iprt/mangling.h	(revision 57954)
+++ /trunk/include/iprt/mangling.h	(revision 57955)
@@ -1851,4 +1851,5 @@
 # define RTTraceGetDefaultBuf                           RT_MANGLER(RTTraceGetDefaultBuf)
 # define RTTraceSetDefaultBuf                           RT_MANGLER(RTTraceSetDefaultBuf)
+# define RTUdpCreateClientSocket                        RT_MANGLER(RTUdpCreateClientSocket)
 # define RTUdpRead                                      RT_MANGLER(RTUdpRead)
 # define RTUdpServerCreate                              RT_MANGLER(RTUdpServerCreate)
Index: /trunk/include/iprt/udp.h
===================================================================
--- /trunk/include/iprt/udp.h	(revision 57954)
+++ /trunk/include/iprt/udp.h	(revision 57955)
@@ -150,4 +150,14 @@
                           size_t cbBuffer, PCRTNETADDR pDstAddr);
 
+/**
+ * Create and connect a data socket.
+ *
+ * @returns iprt status code.
+ * @param   pszAddress      The address to connect to.
+ * @param   uPort           The port to connect to.
+ * @param   pSock           Where to store the handle to the established connection.
+ */
+RTR3DECL(int) RTUdpCreateClientSocket(const char *pszAddress, uint32_t uPort, PRTSOCKET pSock);
+
 /** @} */
 RT_C_DECLS_END
Index: /trunk/src/VBox/Runtime/r3/udp.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/udp.cpp	(revision 57954)
+++ /trunk/src/VBox/Runtime/r3/udp.cpp	(revision 57955)
@@ -687,2 +687,37 @@
 }
 
+
+RTR3DECL(int) RTUdpCreateClientSocket(const char *pszAddress, uint32_t uPort, PRTSOCKET pSock)
+{
+    /*
+     * Validate input.
+     */
+    AssertReturn(uPort > 0, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pszAddress, VERR_INVALID_POINTER);
+
+    /*
+     * Resolve the address.
+     */
+    RTNETADDR Addr;
+    int rc = RTSocketParseInetAddress(pszAddress, uPort, &Addr);
+    if (RT_FAILURE(rc))
+        return rc;
+
+    /*
+     * Create the socket and connect.
+     */
+    RTSOCKET Sock;
+    rc = rtSocketCreate(&Sock, AF_INET, SOCK_DGRAM, 0);
+    if (RT_SUCCESS(rc))
+    {
+        RTSocketSetInheritance(Sock, false /* fInheritable */);
+        rc = rtSocketBind(Sock, &Addr);
+        if (RT_SUCCESS(rc))
+        {
+            *pSock = Sock;
+            return VINF_SUCCESS;
+        }
+        RTSocketClose(Sock);
+    }
+    return rc;
+}
