以前にこの質問をしましたが、解決策がありませんでした (まだ問題があります)。関数がエラーなしで返され、データが送信されなかったため、困惑しています! このコードは Linux で動作します... VxWorks バージョンは動作しません (sendto は送信しませんが、エラーなしで返されます)。
概要 - 私は単純なエコー サーバーを書いています - サーバーは (x86 ボックスから) データを正常に受信し、正常に送信したと主張します。ただし、クライアント (x86 上の netcat) ではデータが受信されません。このコードは、PowerPC ボックスの VxWorks 5.4 で実行されています...
UDP データは何らかの方法でバッファリングされていますか?
別のタスクが sendto の送信を妨げている可能性はありますか? (ここで暴走するつもりはありませんが、通常の優先度でアプリケーションをタスク生成します。つまり、ネットワーク タスクなどのような重要なタスクの下にあるため、これで問題ありません)。
VxWorks が UDP データをバッファリングしている可能性はありますか?
ルーティング テーブルをセットアップしました ... ping が機能します。
私の知る限り、ファイアウォールはありません...
sendto のニュアンスと、データがクライアントに到達するのを妨げるものは何ですか...
while(1)
{
readlen = recvfrom(sock, buf, BUFLEN, 0, (struct sockaddr *) &client_address, &slen);
if (readlen == ERROR)
{
printf("RECVFROM FAILED()/n");
return (ERROR);
}
printf("Received %d bytes FROM %s:%d\nData: %s\n\n",
readlen, inet_ntoa(client_address.sin_addr),
ntohs(client_address.sin_port), buf);
// Send it to right back to the client using the open UDP socket
// but send it to OUTPORT
client_address.sin_port = htons(OUTPORT);
// Remember slen is a value (not an address ... in, NOT in-out)
sendlen = sendto(sock, buf, BUFLEN, 0, (struct sockaddr*)&client_address, slen);
// more code ....
}