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收到。

我得到的是只有在收到数据后我才必须从服务器关闭会话

从技术上讲,可以关闭 TCP 连接的写入端,使用shutdown(socket, SHUT_WR)指示此对等方不再发送任何数据。但是它仍然需要读取所有数据,直到EOF看到然后close(socket)

而且我必须手动通过 EOL 或回车或“\n”或“\r”

这与套接字或 TCP 无关,而是与更高的应用程序协议(例如 HTTP)有关。有可用于这种流行协议的库来简化此任务。

于 2012-11-19T11:03:20.097 回答