recvmsg函数使用的有关问题

recvmsg函数使用的问题 写了一个程序,用recvmsg函数接收数据,但是执行到该函数处,不进入阻塞,不等待信息到

recvmsg函数使用的问题

写了一个程序,用recvmsg函数接收数据,但是执行到该函数处,不进入阻塞,不等待信息到来就退出了。各位帮忙看看这是怎么回事。
#include <netinet/in.h>
#include <stddef.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/param.h>
int   main()
{
                int   sock,i;
                struct   sockaddr_in   address,source;
                struct   msghdr   msg;
                struct   cmsghdr   cmsg;
                sock=socket(AF_INET,SOCK_DGRAM,0);
                address.sin_family=AF_INET;
                address.sin_port=htons(5678);
                address.sin_addr.s_addr=inet_addr( "0.0.0.0 ");
                bind(sock,(struct   sockaddr   *)&address,sizeof(address));
                puts( "server   started! ");
                msg.msg_name=&source;
                msg.msg_control=&cmsg;
                memset(buff,500,0);
                recvmsg(sock,&msg,0);
                close(sock);
}

[解决办法]
一定是recvmsg(sock,&msg,0);出错了
[解决办法]
应该给msghdr的每个字段赋值。