diff --git a/utp.go b/utp.go
index <HASH>..<HASH> 100644
--- a/utp.go
+++ b/utp.go
@@ -179,6 +179,11 @@ func DialTimeout(addr string, timeout time.Duration) (nc net.Conn, err error) {
 	return s.DialTimeout(addr, timeout)
 }
 
+// Listen creates listener Socket to accept incoming connections.
+func Listen(laddr string) (net.Listener, error) {
+	return NewSocket("udp", laddr)
+}
+
 func nowTimestamp() uint32 {
 	return uint32(time.Now().UnixNano() / int64(time.Microsecond))
 }
diff --git a/utp_test.go b/utp_test.go
index <HASH>..<HASH> 100644
--- a/utp_test.go
+++ b/utp_test.go
@@ -95,6 +95,15 @@ func TestDialTimeout(t *testing.T) {
 	t.Log(err)
 }
 
+func TestListen(t *testing.T) {
+	defer goroutineLeakCheck(t)()
+	ln, err := NewSocket("udp", "localhost:0")
+	if err != nil {
+		t.Fatal(err)
+	}
+	ln.Close()
+}
+
 func TestMinMaxHeaderType(t *testing.T) {
 	require.Equal(t, stSyn, stMax)
 }
provide Listen method that returns net.Listener