【问题标题】:break condition while reading from socket从套接字读取时中断条件
【发布时间】:2016-10-05 03:07:23
【问题描述】:

我想从套接字读取数据流并在服务器完成发送后停止读取。下面的代码永远不会运行 else if (因为 read 显然永远不会读取 0 字节;))。从服务器获取我想要的内容后,如何中断或修改 while 循环以中断?

    while(1){
        /* receive answer from server */
        t = read(sock, output, MAX);
        if (t > 0) {
            puts("received smthn");
        }
        else if (t == 0) {
            puts("***ITS OVER***");
        } else {
            printf("Connection with server terminated.\n");
            exit(1);
        }
    }

【问题讨论】:

  • 发送完什么? NB read() 在对端关闭连接时返回零。
  • 服务器正在通过套接字发送字符串。

标签: sockets


【解决方案1】:

要使read 函数返回0,服务器必须关闭其一侧的套接字(请参阅close)。

如果服务器忘记在套接字上调用close,您可以在读取之前尝试查看是否有一些数据准备好在套接字上读取:参见select或参见https://stackoverflow.com/a/36786740/1212012

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 2021-03-04
    • 2011-10-29
    • 2011-09-04
    • 1970-01-01
    • 2019-04-02
    • 2013-10-12
    相关资源
    最近更新 更多