mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			88 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
// 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.
 | 
						|
 | 
						|
package net
 | 
						|
 | 
						|
import (
 | 
						|
	"syscall"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
type pollDesc struct {
 | 
						|
	fd      *netFD
 | 
						|
	closing bool
 | 
						|
}
 | 
						|
 | 
						|
func (pd *pollDesc) init(fd *netFD) 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) error {
 | 
						|
	if pd.closing {
 | 
						|
		return errClosing
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (pd *pollDesc) prepareRead() error { return pd.prepare('r') }
 | 
						|
 | 
						|
func (pd *pollDesc) prepareWrite() error { return pd.prepare('w') }
 | 
						|
 | 
						|
func (pd *pollDesc) wait(mode int) error {
 | 
						|
	if pd.closing {
 | 
						|
		return errClosing
 | 
						|
	}
 | 
						|
	return errTimeout
 | 
						|
}
 | 
						|
 | 
						|
func (pd *pollDesc) waitRead() error { return pd.wait('r') }
 | 
						|
 | 
						|
func (pd *pollDesc) waitWrite() error { return pd.wait('w') }
 | 
						|
 | 
						|
func (pd *pollDesc) waitCanceled(mode int) {}
 | 
						|
 | 
						|
func (pd *pollDesc) waitCanceledRead() {}
 | 
						|
 | 
						|
func (pd *pollDesc) waitCanceledWrite() {}
 | 
						|
 | 
						|
func (fd *netFD) setDeadline(t time.Time) error {
 | 
						|
	return setDeadlineImpl(fd, t, 'r'+'w')
 | 
						|
}
 | 
						|
 | 
						|
func (fd *netFD) setReadDeadline(t time.Time) error {
 | 
						|
	return setDeadlineImpl(fd, t, 'r')
 | 
						|
}
 | 
						|
 | 
						|
func (fd *netFD) setWriteDeadline(t time.Time) error {
 | 
						|
	return setDeadlineImpl(fd, t, 'w')
 | 
						|
}
 | 
						|
 | 
						|
func setDeadlineImpl(fd *netFD, 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
 | 
						|
}
 |