У меня есть сервер, чем процесс "обработчик команд". Он получает сообщения по протоколу UDP и передает работу для выполнения другому процессу, связываясь с этим процессом через опубликованный API (независимо от механизма IPC, который использует этот процесс). Наша система имеет несколько взаимодействующих процессов. Затем результат этого вызова API отправляется обратно клиенту из процесса обработчика команд.
Одной из команд является управление потоком данных, который генерируется из другого процесса для клиента (сообщение «connect»).
Должно ли это работать? Я отправляю IP-адрес и номер порта клиента другому процессу, этот процесс создает новый сокет и выполняет sendto ... Я проследил код и все выглядит хорошо, но клиент все еще заблокирован на получить ... Я знаю, если я отправлю sendto из обработчика команды, он получит ответ, но не из нового сокета.
Вот пример кода:
#define LEN 10000
char buffer[LEN];
int sfd, nsfd, bread, addrsize;
struct sockaddr_in addr;
addrsize = sizeof (struct sockaddr_in);
server.sin_family = AF_INET;
server.sin_port = htons(5200);
server.sin_addr.s_addr = INADDR_ANY;
sfd = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
bind (sfd, (struct sockaddr*)&server, addrsize);
bread = recvfrom(sfd, buffer, LEN, 0, &addr, &addrsize);
/* send IP address and port number through the API to another process */
/* in that other process, I do something like this...addr has the IP
* address and port in it from above: */
nsfd = socket (AF_INET, SOCK_DGRAM, IPROTO_UDP);
sendto(nsfd, buff, bread, 0, &addr, sizeof(addr));
ТАК, пожалуйста, помогите!