netlink接收失败的问题
大家好,现用netlink进行内核与用户通信,用户程序循环接收内核发过来的消息。但是用户程序时常会出现接收失败的情况,失败时的现象是“No buffer space available”,查了一下资料,暂时还没什么结果,请哪位能指点一下,谢谢了。(内核每次发过来的信息长度大概为10个字节左右,偶尔会有一笔500个字节的信息)
代码如下:
#define BUFFER_SIZE_RECV 1024
int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);
pid = fork();
if(0 == pid)
{
while(1)
{
memset(nlh, 0, NLMSG_SPACE(BUFFER_SIZE_RECV));
iov.iov_base = (void *)nlh;
iov.iov_len = NLMSG_SPACE(BUFFER_SIZE_RECV);
memset(&msg, 0, sizeof(msg));
memset(&dest_addr, 0, sizeof(dest_addr));
msg.msg_name = (void *)&dest_addr;
msg.msg_namelen = sizeof(dest_addr);
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
msg.msg_control = NULL;
msg.msg_controllen = 0;
msg.msg_flags = 0;
res= recvmsg(sock_fd, &msg, 0);
if(0 >= Recvflag)
{
printf("res= %d\terrno = %d\n", res, errno); //出错时res=-1,errno=105
}
...
}
}
这段代码是在子进程中执行的,每次执行完之后用exit退出,当有新的连接进来的时候重新产生一个子进程,处理以上的流程。 大家帮帮忙啊! 接收缓冲区设置大一点试试,参考:
zhangzhenyuan163.blog.163.com/blog/static/85819389201282312415539/
页:
[1]