func (f *file) Open() (Reader, error) { f.fs.mu.Lock() defer f.fs.mu.Unlock() if f.fs.open < 0 { return nil, ErrClosed } if f.open { return nil, errFileOpen } of, err := os.OpenFile(f.path(), os.O_RDONLY, 0) if err != nil { if f.hasOldName() && os.IsNotExist(err) { of, err = os.OpenFile(f.oldPath(), os.O_RDONLY, 0) if err == nil { goto ok } } return nil, err } ok: fdtrack.Open("leveldb") f.open = true f.fs.open++ return fileWrap{of, f}, nil }
// NewHTTPUClient creates a new HTTPUClient, opening up a new UDP socket for the // purpose. func NewHTTPUClient() (*HTTPUClient, error) { conn, err := net.ListenPacket("udp", ":0") if err != nil { return nil, err } fdtrack.Open("upnp") return &HTTPUClient{conn: conn}, nil }
// ListenUDP returns a new table that listens for UDP packets on laddr. func ListenUDP(priv *ecdsa.PrivateKey, laddr string, natm nat.Interface, nodeDBPath string) (*Table, error) { addr, err := net.ResolveUDPAddr("udp", laddr) if err != nil { return nil, err } fdtrack.Open("p2p") conn, err := net.ListenUDP("udp", addr) if err != nil { return nil, err } tab, _ := newUDP(priv, conn, natm, nodeDBPath) glog.V(logger.Info).Infoln("Listening,", tab.self) return tab, nil }
func (f *file) Create() (Writer, error) { f.fs.mu.Lock() defer f.fs.mu.Unlock() if f.fs.open < 0 { return nil, ErrClosed } if f.open { return nil, errFileOpen } of, err := os.OpenFile(f.path(), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { return nil, err } fdtrack.Open("leveldb") f.open = true f.fs.open++ return fileWrap{of, f}, nil }
func (n *Client) rpc(msg []byte, resultSize int) (result []byte, err error) { var server net.UDPAddr server.IP = n.gateway server.Port = nAT_PMP_PORT conn, err := net.DialUDP("udp", nil, &server) if err != nil { return } fdtrack.Open("natpmp") defer fdtrack.Close("natpmp") defer conn.Close() result = make([]byte, resultSize) needNewDeadline := true var tries uint for tries = 0; tries < nAT_TRIES; { if needNewDeadline { err = conn.SetDeadline(time.Now().Add((nAT_INITIAL_MS << tries) * time.Millisecond)) if err != nil { return } needNewDeadline = false } _, err = conn.Write(msg) if err != nil { return } var bytesRead int var remoteAddr *net.UDPAddr bytesRead, remoteAddr, err = conn.ReadFromUDP(result) if err != nil { if err.(net.Error).Timeout() { tries++ needNewDeadline = true continue } return } if !remoteAddr.IP.Equal(n.gateway) { log.Printf("Ignoring packet because IPs differ:", remoteAddr, n.gateway) // Ignore this packet. // Continue without increasing retransmission timeout or deadline. continue } if bytesRead != resultSize { err = fmt.Errorf("unexpected result size %d, expected %d", bytesRead, resultSize) return } if result[0] != 0 { err = fmt.Errorf("unknown protocol version %d", result[0]) return } expectedOp := msg[1] | 0x80 if result[1] != expectedOp { err = fmt.Errorf("Unexpected opcode %d. Expected %d", result[1], expectedOp) return } resultCode := readNetworkOrderUint16(result[2:4]) if resultCode != 0 { err = fmt.Errorf("Non-zero result code %d", resultCode) return } // If we got here the RPC is good. return } err = fmt.Errorf("Timed out trying to contact gateway") return }