Mercurial > hg > CbC > CbC_gcc
view libgo/go/internal/poll/fd_poll_js.go @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
// Copyright 2013 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. // +build js,wasm package poll import ( "syscall" "time" ) type pollDesc struct { fd *FD closing bool } func (pd *pollDesc) init(fd *FD) error { pd.fd = fd; return nil } func (pd *pollDesc) close() {} func (pd *pollDesc) evict() { pd.closing = true if pd.fd != nil { syscall.StopIO(pd.fd.Sysfd) } } func (pd *pollDesc) prepare(mode int, isFile bool) error { if pd.closing { return errClosing(isFile) } return nil } func (pd *pollDesc) prepareRead(isFile bool) error { return pd.prepare('r', isFile) } func (pd *pollDesc) prepareWrite(isFile bool) error { return pd.prepare('w', isFile) } func (pd *pollDesc) wait(mode int, isFile bool) error { if pd.closing { return errClosing(isFile) } if isFile { // TODO(neelance): wasm: Use callbacks from JS to block until the read/write finished. return nil } return ErrTimeout } func (pd *pollDesc) waitRead(isFile bool) error { return pd.wait('r', isFile) } func (pd *pollDesc) waitWrite(isFile bool) error { return pd.wait('w', isFile) } func (pd *pollDesc) waitCanceled(mode int) {} func (pd *pollDesc) pollable() bool { return true } // SetDeadline sets the read and write deadlines associated with fd. func (fd *FD) SetDeadline(t time.Time) error { return setDeadlineImpl(fd, t, 'r'+'w') } // SetReadDeadline sets the read deadline associated with fd. func (fd *FD) SetReadDeadline(t time.Time) error { return setDeadlineImpl(fd, t, 'r') } // SetWriteDeadline sets the write deadline associated with fd. func (fd *FD) SetWriteDeadline(t time.Time) error { return setDeadlineImpl(fd, t, 'w') } func setDeadlineImpl(fd *FD, t time.Time, mode int) error { d := t.UnixNano() if t.IsZero() { d = 0 } if err := fd.incref(); err != nil { return err } switch mode { case 'r': syscall.SetReadDeadline(fd.Sysfd, d) case 'w': syscall.SetWriteDeadline(fd.Sysfd, d) case 'r' + 'w': syscall.SetReadDeadline(fd.Sysfd, d) syscall.SetWriteDeadline(fd.Sysfd, d) } fd.decref() return nil } // IsPollDescriptor reports whether fd is the descriptor being used by the poller. // This is only used for testing. func IsPollDescriptor(fd uintptr) bool { return false }