0
我有一个模块接收两部分的数据。首先是一个无符号整数,表示接下来将要跟随的数据的长度。然后是数据本身。我这样做如下无限循环kernel_recvmsg有时会得到错误的数据
unsigned int z;
struct kvec vec;
struct msghdr msg;
while(1) {
memset(&vec, 0, sizeof(vec));
memset(&msg, 0, sizeof(msg));
vec.iov_base = &z;
vec.iov_len = sizeof(unsigned int);
ret = kernel_recvmsg(client_socket, &msg, &vec, 1, vec.iov_len, 0);
if(!z)
break;
data = kmalloc(z, GFP_KERNEL);
if(!data)
break;
memset(&vec, 0, sizeof(vec));
memset(&msg, 0, sizeof(msg));
vec.iov_base = data;
vec.iov_len = z;
ret = kernel_recvmsg(client_socket, &msg, &vec, 1, vec.iov_len, 0);
...
...
kfree(data);
}
编辑:我正因为不完整的接收错误的数据。我的回复< vec.iov_len。有没有办法解决这个问题?
谢谢。
@Pang,谢谢你的回复。这足够吗? –
如果整个消息永不到来会怎么样?你有没有想过?并可能测试它? – Malkocoglu