セッションが閉じられる前に、TCP経由で送信されたすべてのデータを取得できる方法はありますか? 私が得ているのは、そのデータが受信された後にのみサーバーからセッションを閉じる必要があり、さらに EOL またはキャリッジリターンまたは "\n" または "\r" を手動で渡す必要があることです。
どんな助けや提案も大歓迎です。
セッションが閉じられる前に、TCP経由で送信されたすべてのデータを取得できる方法はありますか? 私が得ているのは、そのデータが受信された後にのみサーバーからセッションを閉じる必要があり、さらに EOL またはキャリッジリターンまたは "\n" または "\r" を手動で渡す必要があることです。
どんな助けや提案も大歓迎です。
SO_LINGER
ソケットオプションを設定してみてください:
GCDAsyncSocket asyncSocket = ...;
struct linger linger;
linger.l_onoff = 1;
linger.l_linger = 30;
int rv = setsockopt([asyncSocket socketFD], SOL_SOCKET, SO_LINGER, &linger, sizeof(linger));
if (rv < 0)
{
// handle error
}
セッションが閉じられる前に、TCP経由で送信されたすべてのデータを取得できる方法はありますか?
受信するまでソケットからデータを読み続けますEOF
。
私が得ているのは、そのデータが受信された後にのみサーバーからセッションを閉じる必要があるということです
shutdown(socket, SHUT_WR)
技術的には、このピアがこれ以上データを送信しないことを示すことを使用して、TCP 接続の書き込み側を閉じることができます。ただし、 が表示されるまですべてのデータを読み取る必要がありEOF
ますclose(socket)
。
さらに、手動で EOL またはキャリッジ リターンまたは「\n」または「\r」を渡す必要があります。
これはソケットや TCP とはほとんど関係がなく、HTTP などのより高度なアプリケーション プロトコルとは関係ありません。この一般的なプロトコルには、このタスクを簡素化するライブラリが用意されています。