Improve iphelper bufsize calculation

This commit is contained in:
Daniel
2021-06-24 11:48:00 +02:00
parent 7a68dee2e0
commit 603d0193fe

View File

@@ -134,12 +134,16 @@ func getBufSize() int {
return bufSize
}
func increaseBufSize() int {
func increaseBufSize(minSize int) int {
bufSizeLock.Lock()
defer bufSizeLock.Unlock()
// increase
bufSize *= 2
// increase until we reach the minimum size
for bufSize < minSize {
bufSize *= 2
}
// not too much
if bufSize > maxBufSize {
bufSize = maxBufSize
@@ -168,8 +172,8 @@ func (ipHelper *IPHelper) getTable(ipVersion, protocol uint8) (connections []*so
return nil, nil, errors.New("invalid protocol")
}
// try max 3 times
maxTries := 3
// try max 5 times
maxTries := 5
bufSize := getBufSize()
var buf []byte
@@ -201,9 +205,14 @@ func (ipHelper *IPHelper) getTable(ipVersion, protocol uint8) (connections []*so
switch r1 {
case winErrInsufficientBuffer:
if i >= maxTries {
return nil, nil, fmt.Errorf("insufficient buffer error (tried %d times): [NT 0x%X] %s", i, r1, err)
return nil, nil, fmt.Errorf(
"insufficient buffer error (tried %d times): %s bytes required - [NT 0x%X] %s",
i, bufSize, r1, err,
)
}
bufSize = increaseBufSize()
// bufSize was modified by ipHelper.getExtended*Table to hold the
// required buffer size.
bufSize = increaseBufSize(bufSize)
case winErrInvalidParameter:
return nil, nil, fmt.Errorf("invalid parameter: [NT 0x%X] %s", r1, err)
case windows.NO_ERROR: