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