定期的に緊急の範囲外データを受信できるTCPサーバーを開発する必要があります。これを実現するために、POCOC++ライブラリを使用しています。StreamSocketクラスの(不足している)ドキュメントでは、これを達成するのは非常に簡単なタスクであることがわかります。次のようにreceiveBytes()メソッドを使用するときにSO_OOBINLINEフラグを設定することによって実行する必要があります。
n = ss.receiveBytes( buffer, sizeof(buffer), SO_OOBINLINE );
これをテストするために、「sendUrgent()」メソッドを使用してOOBデータ(1バイト)を送信する非常に単純なTCPクライアント(POCOライブラリも使用)を作成しました。
ss1.sendUrgent( 0xFF );
OOBデータを送信しても、何も起こりません。サーバーはそれに気づいていないようです。
一方、sendBytes()メソッドを使用して「通常の」データを送信する場合、StreamSocketにSO_OOBINLINEフラグが設定されていると、同じ送信データを無限に受信します(誰もいないにもかかわらず同じデータを読み取り続けます)再送)。
私は何が欠けていますか?
編集:@JimRの提案とこれを読んだ後、私は試しました:
n = ss.receiveBytes( buffer, sizeof(buffer), MSG_OOB );
そしてこれさえ:
n = ss.receiveBytes( buffer, sizeof(buffer), SO_OOBINLINE | MSG_OOB );
どちらも同じ例外を発生させます:無効な引数。