无论如何,是否允许在会话关闭之前获取通过 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
收到。
我得到的是只有在收到数据后我才必须从服务器关闭会话
从技术上讲,可以关闭 TCP 连接的写入端,使用shutdown(socket, SHUT_WR)
指示此对等方不再发送任何数据。但是它仍然需要读取所有数据,直到EOF
看到然后close(socket)
。
而且我必须手动通过 EOL 或回车或“\n”或“\r”
这与套接字或 TCP 无关,而是与更高的应用程序协议(例如 HTTP)有关。有可用于这种流行协议的库来简化此任务。