私は何日もこの問題に悩まされてきましたが、これがどこから来たのか本当にわかりません。
UDPを介して通信するプログラムを実行しています。sendto()
プログラム間の通信にメソッドを使用しています。また、ユーザーが開いて使用する UI TCP ソケットがあり、telnet を介してプログラムを管理します。telnet 部分は、プログラムの他の機能と 100% 連携しています。
問題は、このsendto()
方法を使用しているときに、プログラムが完全にブロックされ、Telnet 接続が切断されることです (通信がホストによって切断されたと表示されます)。私の問題は、プログラムがブロックされると、sendto()
後で何が実行されないため、失敗するのかがわからないことです。次のようなものでも:
if(sendto(...)<0)
{
perror("Sendto error :");
}
で何も情報が得られませんerrno
。telnet 接続が切断されているという事実は、私には奇妙に思えます。なぜなら、それは非常に異なるポート上にあるため、このように中断されるべきではないからです。UDP ソケットを非ブロッキングとして設定しようとしましたが、それでも機能しません。コードの非動作部分は次のとおりです。
struct sockaddr_in address;
hp = gethostbyname(myaddr);
address.sin_family = AF_INET;
address.sin_port = htons(udp_port);
memcpy(&(address.sin_addr.s_addr), hp->h_addr, hp->h_length);
sendto(fd, buffer, buffer_size, 0, (struct sockaddr *)&address, sizeof(address));
close(fd);
事前にご協力いただきありがとうございます。具体的な情報が必要な場合はお問い合わせください。