无论如何是否允许在会话关闭之前通过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)有关。有一些简化此任务的流行协议的库。