現在、ニーズに合わせてDennis BushのUFTP(http://uftp-multicast.sourceforge.net)を変更しています。私が現在やろうとしているのは、クライアントがCOMPLETEメッセージを送信するアドレスを変更することです。変更したバージョンのUFTPのクライアントに、サーバーにユニキャストするのではなく、COMPLETEメッセージをマルチキャストしてもらいたいのです。これは、マルチキャストグループ内のすべてのクライアントが、送信されたCOMPLETEメッセージだけでなく、サーバ。
UFTPの作成者は、client_transfer.cの359行目、nb_sendto()関数呼び出し、 COMPLETESの送信先のプライベートマルチキャストアドレスとポートを含む構造体の5番目の引数を変更する必要があると言っています。残念ながら、「プロトコルでサポートされていないアドレスファミリ」エラーが発生します。コードセクションは元々次のようなものでした:
if (nb_sendto(listener, outpacket, payloadlen, 0,
(struct sockaddr *)&group_list[listidx].replyaddr,
sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
sockerror(group_list[listidx].group_id, group_list[listidx].file_id,
"Error sending COMPLETE");
} else {
log(group_list[listidx].group_id, group_list[listidx].file_id,
"COMPLETE sent");
}
set_timeout(listidx);
free(buf);
free(encrypted);
私の現在のコードは次のようになります。
if (nb_sendto(listener, outpacket, payloadlen, 0,
////modified line:
(struct in_addr *)&group_list[listidx].multi.s_addr, //struct in_addr multi;
////end of modified line
sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
sockerror(group_list[listidx].group_id, group_list[listidx].file_id,
"Error sending COMPLETE");
} else {
log(group_list[listidx].group_id, group_list[listidx].file_id,
"COMPLETE sent");
}
set_timeout(listidx);
free(buf);
free(encrypted);
エラーは、私にはかなりあいまいです。正確にはどういう意味ですか?そのようなエラーの考えられる原因は何でしょうか?誰かが私を正しい方向に向けることができますか?