我有一个 Python 库,用于ctypes向 C 库注册回调。回调的签名是:
CFUNCTYPE(c_int_32, c_uint_32, POINTER(c_byte), POINTER(c_size_t))
Run Code Online (Sandbox Code Playgroud)
在本例中,第三个参数是指向 C 库分配的字节数组的指针,第四个参数是其长度。
我想通过调用使用来自网络的数据填充字节数组socket.recv_into。更重要的是,我想完全填充这个字节数组:也就是说,如果recv_into返回的字节数少于该函数的第四个参数,那么我想recv_into再次调用。
假设我的函数如下所示:
def callback(first, second, buffer, size):
total_read = 0
while total_read < size[0]:
total_read += some_socket.recv_into(buffer, size[0] - total_read)
# XXX: What happens here???
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何操作 的值buffer以确保每次调用都会recv_into追加到缓冲区,而不是覆盖以前写入的数据?