Winsock2を使ってネットワークプログラミングをしているのですが、受信パケットサイズを取得する良い方法が見つかりません。
現在は次のような方法で取得しています。
int get_received_bytes(SOCKET & sock)
{
Bindata buffer;
buffer.set_size(2048);
int received_bytes;
while (true)
{
received_bytes = recvfrom(
sock,
buffer.buffer(),
buffer.bytes(),
MSG_PEEK,
NULL,
NULL);
const int error = -1;
const bool succeeded = received_bytes != error;
if (succeeded)
{
return received_bytes;
}
const int buffer_overflow = 10040;
if(WSAGetLastError() == buffer_overflow)
{
buffer.set_size(buffer.bytes() * 2);
continue;
}
return error;
}
return received_bytes;
}
recvfromのときにMSG_PEEK|MSG_TRUNCを指定する方法を思いつきましたが、エラーが発生し、WSAGetLastErrorの戻り値が10045(Operation not supported.)でした。Windows環境だからでしょう。
これを解決する方法を探した方が良いのでしょうか?
また、受信パッケージのサイズを素直に取得する方法は存在しないのでしょうか?
どうぞよろしくお願いいたします。