1

セッションが閉じられる前に、TCP経由で送信されたすべてのデータを取得できる方法はありますか? 私が得ているのは、そのデータが受信された後にのみサーバーからセッションを閉じる必要があり、さらに EOL またはキャリッジリターンまたは "\n" または "\r" を手動で渡す必要があることです。

どんな助けや提案も大歓迎です。

4

2 に答える 2

0

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
}
于 2012-10-25T08:19:02.047 に答える
0

セッションが閉じられる前に、TCP経由で送信されたすべてのデータを取得できる方法はありますか?

受信するまでソケットからデータを読み続けますEOF

私が得ているのは、そのデータが受信された後にのみサーバーからセッションを閉じる必要があるということです

shutdown(socket, SHUT_WR)技術的には、このピアがこれ以上データを送信しないことを示すことを使用して、TCP 接続の書き込み側を閉じることができます。ただし、 が表示されるまですべてのデータを読み取る必要がありEOFますclose(socket)

さらに、手動で EOL またはキャリッジ リターンまたは「\n」または「\r」を渡す必要があります。

これはソケットや TCP とはほとんど関係がなく、HTTP などのより高度なアプリケーション プロトコルとは関係ありません。この一般的なプロトコルには、このタスクを簡素化するライブラリが用意されています。

于 2012-11-19T11:03:20.097 に答える