1 // Copyright 2013 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
9 type streamListener
struct {
14 type dualStackServer
struct {
20 cs
[]Conn
// established connections at the passive open side
23 func (dss
*dualStackServer
) buildup(server
func(*dualStackServer
, Listener
)) error
{
24 for i
:= range dss
.lns
{
25 go server(dss
, dss
.lns
[i
].ln
)
30 func (dss
*dualStackServer
) putConn(c Conn
) error
{
32 dss
.cs
= append(dss
.cs
, c
)
37 func (dss
*dualStackServer
) teardownNetwork(net
string) error
{
39 for i
:= range dss
.lns
{
40 if net
== dss
.lns
[i
].net
&& dss
.lns
[i
].ln
!= nil {
49 func (dss
*dualStackServer
) teardown() error
{
51 for i
:= range dss
.lns
{
52 if dss
.lns
[i
].ln
!= nil {
58 for _
, c
:= range dss
.cs
{
65 func newDualStackServer(lns
[]streamListener
) (*dualStackServer
, error
) {
66 dss
:= &dualStackServer
{lns
: lns
, port
: "0"}
67 for i
:= range dss
.lns
{
68 ln
, err
:= Listen(dss
.lns
[i
].net
, dss
.lns
[i
].addr
+":"+dss
.port
)
75 if _
, dss
.port
, err
= SplitHostPort(ln
.Addr().String()); err
!= nil {