| // Copyright 2016 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 solaris | 
 |  | 
 | // Package lif provides basic functions for the manipulation of | 
 | // logical network interfaces and interface addresses on Solaris. | 
 | // | 
 | // The package supports Solaris 11 or above. | 
 | package lif | 
 |  | 
 | import "syscall" | 
 |  | 
 | type endpoint struct { | 
 | 	af int | 
 | 	s  uintptr | 
 | } | 
 |  | 
 | func (ep *endpoint) close() error { | 
 | 	return syscall.Close(int(ep.s)) | 
 | } | 
 |  | 
 | func newEndpoints(af int) ([]endpoint, error) { | 
 | 	var lastErr error | 
 | 	var eps []endpoint | 
 | 	afs := []int{sysAF_INET, sysAF_INET6} | 
 | 	if af != sysAF_UNSPEC { | 
 | 		afs = []int{af} | 
 | 	} | 
 | 	for _, af := range afs { | 
 | 		s, err := syscall.Socket(af, sysSOCK_DGRAM, 0) | 
 | 		if err != nil { | 
 | 			lastErr = err | 
 | 			continue | 
 | 		} | 
 | 		eps = append(eps, endpoint{af: af, s: uintptr(s)}) | 
 | 	} | 
 | 	if len(eps) == 0 { | 
 | 		return nil, lastErr | 
 | 	} | 
 | 	return eps, nil | 
 | } |