hacking the /org/freedesktop/hal/udev_event socket
hi ppl,
i am trying to hack hal and recieve the data that is sent by udev to hal thru sockets.... the code i ave written is at the end...
the problem is that i never recieve any data on polling event though i should be recieving ( and i know that udev has written data on the socket). is there any care i need to take while hacking sockets used by system daemon?
void osspec_init()
{
int/* udev_socket,*/on=1;
struct sockaddr_un saddr;
GIOChannel *udev_channel;
socklen_t addrlen;
memset(&saddr,0x00,sizeof(saddr));
saddr.sun_family=AF_LOCAL;
strcpy(&saddr.sun_path[1],"/org/freedesktop/hal/udev_event");
addrlen=offsetof(struct sockaddr_un,sun_path) + strlen(saddr.sun_path + 1);
udev_socket=socket(AF_LOCAL,SOCK_DGRAM,0);
if(udev_socket<0){
printf("Error creating socket");
exit(0);
}
printf("\nSocket created..");
if((bind(udev_socket,(struct sockaddr *) &saddr,addrlen))<0){
printf("\nError binding socket..");
exit(1);
}
/* enable receiving of the sender credentials */
setsockopt(udev_socket, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
listen(udev_socket,5);
}
int main()
{
char buf[1024];
int data;
struct msghdr smsg;
struct iovec iov;
struct sockaddr *client_addr;
struct ucred *cred;
char cred_msg[CMSG_SPACE(sizeof(struct ucred))];
osspec_init();
memset(buf,0x0,sizeof(buf));
memset(&smsg,0x0,sizeof(struct msghdr)) ;
iov.iov_base=&buf;
iov.iov_len=sizeof(buf);
smsg.msg_iov = &iov;
smsg.msg_iovlen = 1;
smsg.msg_control = cred_msg;
smsg.msg_controllen = sizeof (cred_msg);
while(1){
accept(udev_socket,client_addr,(socklen_t*)sizeof(client_addr));
data=recvmsg(udev_socket,&smsg,0);
if(data>0)
printf("\nMessage recieved: %s",smsg.msg_iov->iov_base);
}
close(udev_socket);
}
maybe there is a small mistake in the code, but i am unable to debug it? Sorry for the same..
|