Skip to content
This repository has been archived by the owner on Feb 22, 2020. It is now read-only.

Fix spurious 'Socket receive buffer full' errors #61

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

jamadden
Copy link

(This may be related to #34.)

In some cases, it was possible for the buffer to be reported as full when in fact it wasn't; it had lots of space at the beginning of the buffer, but the write cursor reached the end. The skip method never detected the read and write pointers aligning and so never reset the buffer. This would happen when reading a large result set from the server very quickly; I suspect its occurrence depends on factors like network connection bandwidth and latency as well as the net_buffer_length of the server.

This builds on my previous PR.

jamadden and others added 5 commits March 29, 2015 10:54
Replaces PyObject_Malloc/Free with their PyMem counterparts; PyPy does
not support the PyObject variants. Arguably, based on
https://docs.python.org/2.3/whatsnew/section-pymalloc.html the PyMem
variants are a better fit for this use case anyway (PyObject_ being
intended for "small" allocations).

Disables the use of CP1250 under PyPy because it lacks the
PyUnicode_Encode function.

There are no new tests failures. (testConnectWithWrongDB fails with a
1044 error for me and not 1049 with both the original code under
CPython and this code under PyPy).
If we are reading many packets of different sizes from a fast database
server, it's possible that the skip() method of the packet reader will
never find the start and end pointers aligned and so it will never reset
them. This can lead to throwing 'Socket receive buffer full' errors when
we reach the end, even if there's plenty of unused space at the start of
the buffer from previous packets.

This checks for this situation and moves the live data and current
pointers to the start of the buffer, thus making room (if possible).
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants