小编Luk*_*asa的帖子

如何使用ctypes多次recv_into C缓冲区?

我有一个 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追加到缓冲区,而不是覆盖以前写入的数据?

python ctypes

5
推荐指数
1
解决办法
1624
查看次数

标签 统计

ctypes ×1

python ×1