会话结束前的TCP数据

时间:2012-10-25 07:05:52

标签: cocoa networking tcp cocoaasyncsocket

无论如何,是否允许在会话关闭之前通过tcp发送所有数据? 我得到的是我必须在收到数据后才从服务器关闭会话,而且我必须手动传递EOL或回车或“\ n”或“\ r”。

感谢任何帮助和建议。

2 个答案:

答案 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)有关。这个流行的协议有可用的库,可以简化这项任务。