「コマンドハンドラー」プロセスよりもサーバーがあります。UDP 経由でメッセージを受信し、発行された API (プロセスが使用する IPC メカニズムに関係なく) を介してそのプロセスと通信することにより、別のプロセスに実行する作業を委任します。私たちのシステムには、いくつかの協調プロセスがあります。次に、その API 呼び出しの結果が、コマンド ハンドラー プロセスからクライアントに返されます。
1 つのコマンドは、別のプロセスからクライアントに生成されるデータ ストリームを制御することです (「接続」メッセージ)。
これは機能するはずですか?クライアントの 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));
だから助けてください!