| // Copyright 2009 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" | 
 |  | 
 | func maxListenerBacklog() int { | 
 | 	fd, err := open("/proc/sys/net/core/somaxconn") | 
 | 	if err != nil { | 
 | 		return syscall.SOMAXCONN | 
 | 	} | 
 | 	defer fd.close() | 
 | 	l, ok := fd.readLine() | 
 | 	if !ok { | 
 | 		return syscall.SOMAXCONN | 
 | 	} | 
 | 	f := getFields(l) | 
 | 	n, _, ok := dtoi(f[0], 0) | 
 | 	if n == 0 || !ok { | 
 | 		return syscall.SOMAXCONN | 
 | 	} | 
 | 	// Linux stores the backlog in a uint16. | 
 | 	// Truncate number to avoid wrapping. | 
 | 	// See issue 5030. | 
 | 	if n > 1<<16-1 { | 
 | 		n = 1<<16 - 1 | 
 | 	} | 
 | 	return n | 
 | } |