【问题标题】:Method g_input_stream_read_all() is blocked方法 g_input_stream_read_all() 被阻塞
【发布时间】:2021-10-30 20:47:17
【问题描述】:

我正在学习 GTK 库。现在,我正在尝试使用 GSocketClient。我正在连接到远程登录服务器以读取一些数据。这段代码

    ...
    GInputStream* istream = g_io_stream_get_input_stream(G_IO_STREAM(scon));
    GOutputStream* ostream = g_io_stream_get_output_stream(G_IO_STREAM(scon));
    
    gsize dlen = 0;
    gchar buffer[1024];
    GError* error = NULL;
    
    while (g_input_stream_read_all(istream, buffer, 1024, &dlen, NULL, &error)) {
    
        for (int i = 0; i < dlen; i++) {
            g_print("%c", buffer[i]);
        }
        
        if (dlen < 1024) {
            break;
        }
    }
    
    if (error != NULL) {
    ....

获取第一个块(1024 字节),然后阻塞直到连接中断。我做错了什么?谢谢:)

【问题讨论】:

    标签: c gtk gtk4


    【解决方案1】:

    哦,我明白了。方法 g_input_stream_read_all() 尝试读取 COUNT 个字节,直到获得 EOF 或错误。我认为它试图读取 COUNT 个可用字节。它被阻止是因为 server-answer 的大小小于 2048 字节。

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多