会话结束前的TCP数据



无论如何是否允许在会话关闭之前通过TCP获得所有数据?我得到的是,我必须仅在收到数据后才从服务器上关闭会话,此外,我必须手动通过EOL或运输返回或" n"或" r"或" 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或carriage-return或" n"或" r"

这与插座或TCP无关,而与更高的应用程序协议(例如HTTP)有关。有一些简化此任务的流行协议的库。

最新更新