// 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.

package net

// parsePort parses service as a decimal integer and returns the
// corresponding value as port. It is the caller's responsibility to
// parse service as a non-decimal integer when needsLookup is true.
//
// Some system resolvers will return a valid port number when given a number
// over 65536 (see https://golang.org/issues/11715). Alas, the parser
// can't bail early on numbers > 65536. Therefore reasonably large/small
// numbers are parsed in full and rejected if invalid.
func ( string) ( int,  bool) {
	if  == "" {
		// Lock in the legacy behavior that an empty string
		// means port 0. See golang.org/issue/13610.
		return 0, false
	}
	const (
		    = uint32(1<<32 - 1)
		 = uint32(1 << 30)
	)
	 := false
	if [0] == '+' {
		 = [1:]
	} else if [0] == '-' {
		 = true
		 = [1:]
	}
	var  uint32
	for ,  := range  {
		if '0' <=  &&  <= '9' {
			 -= '0'
		} else {
			return 0, true
		}
		if  >=  {
			 = 
			break
		}
		 *= 10
		 :=  + uint32()
		if  <  ||  >  {
			 = 
			break
		}
		 = 
	}
	if ! &&  >=  {
		 = int( - 1)
	} else if  &&  >  {
		 = int()
	} else {
		 = int()
	}
	if  {
		 = -
	}
	return , false
}