package  poll 
 
import  ( 
	"errors"  
	"sync"  
	"syscall"  
	"time"  
	_  "unsafe"    
) 
 
 
 
 
func  runtimeNano  () int64  
 
func  runtime_pollServerInit  () 
func  runtime_pollOpen  (fd  uintptr ) (uintptr , int ) 
func  runtime_pollClose  (ctx  uintptr ) 
func  runtime_pollWait  (ctx  uintptr , mode  int ) int  
func  runtime_pollWaitCanceled  (ctx  uintptr , mode  int ) 
func  runtime_pollReset  (ctx  uintptr , mode  int ) int  
func  runtime_pollSetDeadline  (ctx  uintptr , d  int64 , mode  int ) 
func  runtime_pollUnblock  (ctx  uintptr ) 
func  runtime_isPollServerDescriptor  (fd  uintptr ) bool  
 
type  pollDesc  struct  { 
	runtimeCtx  uintptr  
} 
 
var  serverInit  sync .Once  
 
func  (pd  *pollDesc ) init  (fd  *FD ) error  { 
	serverInit .Do (runtime_pollServerInit ) 
	ctx , errno  := runtime_pollOpen (uintptr (fd .Sysfd )) 
	if  errno  != 0  { 
		return  errnoErr (syscall .Errno (errno )) 
	} 
	pd .runtimeCtx  = ctx  
	return  nil  
} 
 
func  (pd  *pollDesc ) close  () { 
	if  pd .runtimeCtx  == 0  { 
		return  
	} 
	runtime_pollClose (pd .runtimeCtx ) 
	pd .runtimeCtx  = 0  
} 
 
 
func  (pd  *pollDesc ) evict  () { 
	if  pd .runtimeCtx  == 0  { 
		return  
	} 
	runtime_pollUnblock (pd .runtimeCtx ) 
} 
 
func  (pd  *pollDesc ) prepare  (mode  int , isFile  bool ) error  { 
	if  pd .runtimeCtx  == 0  { 
		return  nil  
	} 
	res  := runtime_pollReset (pd .runtimeCtx , mode ) 
	return  convertErr (res , isFile ) 
} 
 
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 .runtimeCtx  == 0  { 
		return  errors .New ("waiting for unsupported file type" ) 
	} 
	res  := runtime_pollWait (pd .runtimeCtx , mode ) 
	return  convertErr (res , isFile ) 
} 
 
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 ) { 
	if  pd .runtimeCtx  == 0  { 
		return  
	} 
	runtime_pollWaitCanceled (pd .runtimeCtx , mode ) 
} 
 
func  (pd  *pollDesc ) pollable  () bool  { 
	return  pd .runtimeCtx  != 0  
} 
 
 
 
const  ( 
	pollNoError         = 0  
	pollErrClosing      = 1  
	pollErrTimeout      = 2  
	pollErrNotPollable  = 3  
) 
 
func  convertErr  (res  int , isFile  bool ) error  { 
	switch  res  { 
	case  pollNoError : 
		return  nil  
	case  pollErrClosing : 
		return  errClosing (isFile ) 
	case  pollErrTimeout : 
		return  ErrDeadlineExceeded  
	case  pollErrNotPollable : 
		return  ErrNotPollable  
	} 
	println ("unreachable: " , res ) 
	panic ("unreachable" ) 
} 
 
 
func  (fd  *FD ) SetDeadline  (t  time .Time ) error  { 
	return  setDeadlineImpl (fd , t , 'r' +'w' ) 
} 
 
 
func  (fd  *FD ) SetReadDeadline  (t  time .Time ) error  { 
	return  setDeadlineImpl (fd , t , 'r' ) 
} 
 
 
func  (fd  *FD ) SetWriteDeadline  (t  time .Time ) error  { 
	return  setDeadlineImpl (fd , t , 'w' ) 
} 
 
func  setDeadlineImpl  (fd  *FD , t  time .Time , mode  int ) error  { 
	var  d  int64  
	if  !t .IsZero () { 
		d  = int64 (time .Until (t )) 
		if  d  == 0  { 
			d  = -1   
		} 
	} 
	if  err  := fd .incref (); err  != nil  { 
		return  err  
	} 
	defer  fd .decref () 
	if  fd .pd .runtimeCtx  == 0  { 
		return  ErrNoDeadline  
	} 
	runtime_pollSetDeadline (fd .pd .runtimeCtx , d , mode ) 
	return  nil  
} 
 
 
 
func  IsPollDescriptor  (fd  uintptr ) bool  { 
	return  runtime_isPollServerDescriptor (fd ) 
} 
  
The pages are generated with Golds   v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds  is a Go 101  project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1  (reachable from the left QR code) to get the latest news of Golds .