无论如何,是否允许在会话关闭之前通过tcp发送所有数据? 我得到的是我必须在收到数据后才从服务器关闭会话,而且我必须手动传递EOL或回车或“\ n”或“\ r”。
感谢任何帮助和建议。
答案 0 :(得分: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
}
答案 1 :(得分:0)
无论如何,是否允许在会话关闭之前通过tcp发送所有数据?
您继续从套接字读取数据,直到收到EOF
。
我得到的是我必须在收到数据后才从服务器关闭会话
从技术上讲,可以使用shutdown(socket, SHUT_WR)
关闭TCP连接的写入端,指示此对等方不会再发送任何数据。但它仍然需要读取所有数据,直到看到EOF
然后close(socket)
。
而且我必须手动传递EOL或回车或&#34; \ n&#34;或&#34; \ r&#34;
这与套接字或TCP几乎没有关系,而是与更高的应用程序协议(如HTTP)有关。这个流行的协议有可用的库,可以简化这项任务。