| // Copyright 2015 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package net | |
| import "os" | |
| // BUG(mikio): On NaCl and Windows, the FileConn, FileListener and | |
| // FilePacketConn functions are not implemented. | |
| type fileAddr string | |
| func (fileAddr) Network() string { return "file+net" } | |
| func (f fileAddr) String() string { return string(f) } | |
| // FileConn returns a copy of the network connection corresponding to | |
| // the open file f. | |
| // It is the caller's responsibility to close f when finished. | |
| // Closing c does not affect f, and closing f does not affect c. | |
| func FileConn(f *os.File) (c Conn, err error) { | |
| c, err = fileConn(f) | |
| if err != nil { | |
| err = &OpError{Op: "file", Net: "file+net", Source: nil, Addr: fileAddr(f.Name()), Err: err} | |
| } | |
| return | |
| } | |
| // FileListener returns a copy of the network listener corresponding | |
| // to the open file f. | |
| // It is the caller's responsibility to close ln when finished. | |
| // Closing ln does not affect f, and closing f does not affect ln. | |
| func FileListener(f *os.File) (ln Listener, err error) { | |
| ln, err = fileListener(f) | |
| if err != nil { | |
| err = &OpError{Op: "file", Net: "file+net", Source: nil, Addr: fileAddr(f.Name()), Err: err} | |
| } | |
| return | |
| } | |
| // FilePacketConn returns a copy of the packet network connection | |
| // corresponding to the open file f. | |
| // It is the caller's responsibility to close f when finished. | |
| // Closing c does not affect f, and closing f does not affect c. | |
| func FilePacketConn(f *os.File) (c PacketConn, err error) { | |
| c, err = filePacketConn(f) | |
| if err != nil { | |
| err = &OpError{Op: "file", Net: "file+net", Source: nil, Addr: fileAddr(f.Name()), Err: err} | |
| } | |
| return | |
| } |