code: func DialTimeout(address string, timeout time.Duration) (*PipeConn, error) {
  	deadline := time.Now().Add(timeout)
  
  	now := time.Now()
  	for now.Before(deadline) {
  		millis := uint32(deadline.Sub(now) / time.Millisecond)
  		conn, err := dial(address, millis)
  		if err == nil {
  			return conn, nil
  		}
  		if err == error_sem_timeout {
  			// This is WaitNamedPipe's timeout error, so we know we're done
  			return nil, PipeError{fmt.Sprintf(
  				"Timed out waiting for pipe '%s' to come available", address), true}
  		}
  		if isPipeNotReady(err) {
  			left := deadline.Sub(time.Now())
  			retry := 100 * time.Millisecond
  			if left > retry {
  				<-time.After(retry)
  			} else {
  				<-time.After(left - time.Millisecond)
  			}
  			now = time.Now()
  			continue
  		}
  		return nil, err
  	}
  	return nil, PipeError{fmt.Sprintf(
  		"Timed out waiting for pipe '%s' to come available", address), true}
  }
docs: // DialTimeout acts like Dial, but will time out after the duration of timeout