| // 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 JS 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 |
| } |