man 2 sendto
から:成功しUDPソケットの場合、send関数は失敗しませんが、依然として要求されたデータよりも少ないデータしか書き込まれません。
、これらの呼び出しは、送信されたバイト数を返します。エラーの場合、-1が返され、errnoが適切に設定されます。
したがって、現実的にUDPソケットへの書き込み時に、send()
機能が要求されたよりも少ないデータの書き込みを行うことが起こり、かもしれないが、私はすべてのデータを書き込むための障害が、これらの機能の障害として処理されていないことを理解することがアムこの失敗の理由はerrno
に指定されていませんか?
send()
は-1
を返すか、errno
を適切に設定するか、送信要求されたバイト数を返しますか?言い換えれば
:
if(send(udp_sock_fd, buf, buflen, 0) == -1) {
int err = errno;
fprintf(stderr, "Send failed:\n");
fprintf(stderr, strerror(err));
}
それともそれはそのような何かを書くことはむしろ必要である:このエラーは、十分なコードを処理している
ssize_t bytes_send = send(udp_sock_fd, buf, buflen, 0);
if(bytes_send == -1) {
int err = errno;
fprintf(stderr, "Send failed:\n");
fprintf(stderr, strerror(err));
} else if(bytes_send < buflen) {
fprintf(stderr, "Incomplete send for unknown reason.\n");
}
良い質問ですが、私も好奇心が強いです。あなたに「ただ試してみてください」と言ってくれる人を叩いてください。 –
ただ試してみてください。 :) – jiveturkey
@jnbbender * slap *; Pもっと深刻なことに、どのように役立つか分かりませんが、私はそのような状況を引き起こすことはできません。失敗した試行はありません。起こる。 – gaazkam