Я пытаюсь передать дескриптор файла между двумя процессами, используя функции sendmsg, recvmsg ..
Я делаю это, создавая сокет в домене unix.
Когда я выполняю его, я получаюоперация не поддерживается ошибка для recvmsg, она работает нормально с sendmsg ..
ниже приведен код ..
struct sockaddr_un serveraddr;
if((sfd=socket(AF_UNIX,SOCK_STREAM,0))<0)
{
perror("socket() failed");
unlink(SERVER_PATH);
exit(0);
}
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sun_family = AF_UNIX;
strcpy(serveraddr.sun_path, SERVER_PATH);
if((rc = bind(sfd, (struct sockaddr *)&serveraddr, SUN_LEN(&serveraddr)))<0)
{
perror("bind() failed");
unlink(SERVER_PATH);
exit(0);
}
if((rc = listen(sfd, 10))<0)
{
perror("listen() failed");
exit(0);
}
printf("Ready for client connect().\n");
nsfd = accept(sfd, NULL, NULL);
if (nsfd < 0)
{
perror("accept() failed");
unlink(SERVER_PATH);
exit(0);
}
/*rc = setsockopt(nsfd, SOL_SOCKET, SO_RCVLOWAT,(char *)&length, sizeof(length));
if (rc < 0)
{
perror("setsockopt(SO_RCVLOWAT) failed");
unlink(SERVER_PATH);
exit(0);
}*/
recv(nsfd,buffer,200,0);
printf("the data recieved from client is %s\n",buffer);
struct iovec iov[1];
struct msghdr msg;
iov[0].iov_base = (char*)0;
iov[0].iov_len=0;
msg.msg_iov=iov;
msg.msg_iovlen=1;
msg.msg_name=(caddr_t)0;
msg.msg_control=(caddr_t)&fd;
msg.msg_controllen=sizeof(fd);
if(recvmsg(nsfd,&msg,0)<0)
{
perror("recvmsg error:");
unlink(SERVER_PATH);
exit(0);
}
любой, пожалуйста, дайте мне знать, что я могу сделать, чтобы решитьошибка ..