1

私は何日もこの問題に悩まされてきましたが、これがどこから来たのか本当にわかりません。

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);

事前にご協力いただきありがとうございます。具体的な情報が必要な場合はお問い合わせください。

4

0 に答える 0