Потеря данных при передаче по сети GIO

У меня проблема с GIO. Я передаю данные по сети, и она отлично работает для процента полученных байтов (измененных с помощью STRINGSIZE), но после этого ничего не копирует. Например, если STRINGSIZE равен 350, он копирует только более 50 байтов. Есть идеи?

    gboolean recieve_complete(GSocketService *socket, GSocketConnection *connection,      GObject *source_object, gpointer user_data){
          GInputStream * input;
          int i;
          int *recieved_data = malloc(sizeof(int) * (STRINGSIZE + 50));
          for(i = 0; i < (STRINGSIZE + 50); i++)
              recieved_data[i] = 0;  //Sets register to empty.

          input = g_io_stream_get_input_stream(G_IO_STREAM(connection));
          g_input_stream_read (input, recieved_data, (STRINGSIZE + 50), NULL, NULL);
          proccess_data(recieved_data);
          free(recieved_data);
     }

2 ответа

Драхнр прав. Если вы хотите получить все данные одновременно, используйте вместо этого g_input_stream_read_all.

Вы не оцениваете количество фактически прочитанных байтов g_input_stream_read возвращает - это может отличаться от запрошенного количества байтов.

https://developer.gnome.org/gio/2.32/GInputStream.html

Еще немного вывода и пример передачи со случайной строкой было бы неплохо.

Другие вопросы по тегам