LINUX.ORG.RU

Один сокет на два процеса ?


0

0

Такое вобще возможно ? Чтоб разные процесы могли , используя блокировку , писать в одно реальное TCP/IP соединение и причём это соединение будет создано после fork()

Может передать дескриптор ядра и потом в другом процесе востановить соединение ? или ?

Плиз кинте ссылку или пример или куда копать ...

Всем заранее спасибо .


Ответ на: комментарий от Murr

Похоже это не совсем то .... У меня процесы уже есть а TCP/IP ещо нет .... еслиб перед fork() то да ... но ? Или я чего не понял ?

Один процес принял TCP/IP как теперь передать это соединение в другой/дочерний процес ?

Спасибо мне всё равно приятно что ты решил мне помочь ! Может я не внятно написал...

MfG

kred
() автор топика
Ответ на: комментарий от idle

Приношу свои извинения .... наверное было поздно

Вот пример (Может кому понравится):

int send_fd(int sock, int fd)
{
struct iovec iov;
char ctlBuffer[CMSG_SPACE(sizeof(fd))];
struct msghdr ctlMsg;
struct cmsghdr *cMsg;

iov.iov_base = &fd;
iov.iov_len = sizeof(fd);
ctlMsg.msg_name = NULL;
ctlMsg.msg_namelen = 0;
ctlMsg.msg_iov = &iov;
ctlMsg.msg_iovlen = 1;
ctlMsg.msg_control = ctlBuffer;
ctlMsg.msg_controllen = sizeof(ctlBuffer);
cMsg = CMSG_FIRSTHDR(&ctlMsg);
cMsg->cmsg_level = SOL_SOCKET;
cMsg->cmsg_type = SCM_RIGHTS;
cMsg->cmsg_len = CMSG_LEN(sizeof(fd));
ctlMsg.msg_controllen = cMsg->cmsg_len;
memcpy(CMSG_DATA(cMsg), &fd, sizeof(fd));
return sendmsg(sock, &ctlMsg, 0);
}


int recv_fd(int sock)
{
struct iovec iov;
char ctlBuffer[CMSG_SPACE(sizeof(int))];
struct msghdr ctlMsg;
struct cmsghdr *cMsg;
int fd;

iov.iov_base = &fd;
iov.iov_len = sizeof(fd);
ctlMsg.msg_name = NULL;
ctlMsg.msg_namelen = 0;
ctlMsg.msg_iov = &iov;
ctlMsg.msg_iovlen = 1;
ctlMsg.msg_control = ctlBuffer;
ctlMsg.msg_controllen = sizeof(ctlBuffer);
recvmsg(sock, &ctlMsg, 0);
cMsg = CMSG_FIRSTHDR(&ctlMsg);
memcpy(&fd, CMSG_DATA(cMsg), sizeof(fd));
return fd;
}

kred
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.