1// Copyright 2015 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.
4
5package net
6
7import "os"
8
9// BUG(mikio): On NaCl and Windows, the FileConn, FileListener and
10// FilePacketConn functions are not implemented.
11
12type fileAddr string
13
14func (fileAddr) Network() string  { return "file+net" }
15func (f fileAddr) String() string { return string(f) }
16
17// FileConn returns a copy of the network connection corresponding to
18// the open file f.
19// It is the caller's responsibility to close f when finished.
20// Closing c does not affect f, and closing f does not affect c.
21func FileConn(f *os.File) (c Conn, err error) {
22	c, err = fileConn(f)
23	if err != nil {
24		err = &OpError{Op: "file", Net: "file+net", Source: nil, Addr: fileAddr(f.Name()), Err: err}
25	}
26	return
27}
28
29// FileListener returns a copy of the network listener corresponding
30// to the open file f.
31// It is the caller's responsibility to close ln when finished.
32// Closing ln does not affect f, and closing f does not affect ln.
33func FileListener(f *os.File) (ln Listener, err error) {
34	ln, err = fileListener(f)
35	if err != nil {
36		err = &OpError{Op: "file", Net: "file+net", Source: nil, Addr: fileAddr(f.Name()), Err: err}
37	}
38	return
39}
40
41// FilePacketConn returns a copy of the packet network connection
42// corresponding to the open file f.
43// It is the caller's responsibility to close f when finished.
44// Closing c does not affect f, and closing f does not affect c.
45func FilePacketConn(f *os.File) (c PacketConn, err error) {
46	c, err = filePacketConn(f)
47	if err != nil {
48		err = &OpError{Op: "file", Net: "file+net", Source: nil, Addr: fileAddr(f.Name()), Err: err}
49	}
50	return
51}
52