|
29 | 29 | #include <cstring>
|
30 | 30 | #include <fstream>
|
31 | 31 | #include <filesystem>
|
| 32 | +#include <algorithm> |
32 | 33 |
|
33 | 34 | namespace fs = std::filesystem;
|
34 | 35 |
|
35 |
| -static constexpr size_t RPC_IO_CHUNK = 1024ull * 1024ull * 1024ull; // 1 GiB |
| 36 | +static constexpr size_t MAX_CHUNK_SIZE = 1024ull * 1024ull * 1024ull; // 1 GiB |
36 | 37 |
|
37 | 38 | #ifdef _WIN32
|
38 | 39 | typedef SOCKET sockfd_t;
|
@@ -325,43 +326,45 @@ static std::shared_ptr<socket_t> create_server_socket(const char * host, int por
|
325 | 326 | static bool send_data(sockfd_t sockfd, const void * data, size_t size) {
|
326 | 327 | size_t bytes_sent = 0;
|
327 | 328 | while (bytes_sent < size) {
|
328 |
| - size_t size_to_send = size - bytes_sent; |
329 |
| - if (size_to_send > RPC_IO_CHUNK) size_to_send = RPC_IO_CHUNK; |
| 329 | + size_t size_to_send = std::min(size - bytes_sent, MAX_CHUNK_SIZE); |
330 | 330 | ssize_t n = send(sockfd, (const char *)data + bytes_sent, size_to_send, 0);
|
331 | 331 | if (n < 0) {
|
332 |
| -#ifndef _WIN32 |
333 |
| - perror("send"); |
334 |
| -#else |
335 |
| - fprintf(stderr, "send failed (bytes_sent=%zu, size_to_send=%zu)\n", bytes_sent, size_to_send); |
336 |
| -#endif |
| 332 | + GGML_LOG_ERROR("send failed (bytes_sent=%zu, size_to_send=%zu)\n", |
| 333 | + bytes_sent, size_to_send); |
| 334 | + return false; |
| 335 | + } |
| 336 | + if (n == 0) { |
| 337 | + GGML_LOG_ERROR("send returned 0 (peer closed?)\n"); |
337 | 338 | return false;
|
338 | 339 | }
|
339 |
| - bytes_sent += n; |
| 340 | + bytes_sent += (size_t)n; |
340 | 341 | }
|
341 | 342 | return true;
|
342 | 343 | }
|
343 | 344 |
|
344 | 345 |
|
| 346 | + |
345 | 347 | static bool recv_data(sockfd_t sockfd, void * data, size_t size) {
|
346 | 348 | size_t bytes_recv = 0;
|
347 | 349 | while (bytes_recv < size) {
|
348 |
| - size_t size_to_recv = size - bytes_recv; |
349 |
| - if (size_to_recv > RPC_IO_CHUNK) size_to_recv = RPC_IO_CHUNK; |
| 350 | + size_t size_to_recv = std::min(size - bytes_recv, MAX_CHUNK_SIZE); |
350 | 351 | ssize_t n = recv(sockfd, (char *)data + bytes_recv, size_to_recv, 0);
|
351 |
| - if (n <= 0) { |
352 |
| -#ifndef _WIN32 |
353 |
| - perror("recv"); |
354 |
| -#else |
355 |
| - fprintf(stderr, "recv failed (bytes_recv=%zu, size_to_recv=%zu)\n", bytes_recv, size_to_recv); |
356 |
| -#endif |
| 352 | + if (n < 0) { |
| 353 | + GGML_LOG_ERROR("recv failed (bytes_recv=%zu, size_to_recv=%zu)\n", |
| 354 | + bytes_recv, size_to_recv); |
357 | 355 | return false;
|
358 | 356 | }
|
359 |
| - bytes_recv += n; |
| 357 | + if (n == 0) { |
| 358 | + GGML_LOG_ERROR("recv returned 0 (peer closed?)\n"); |
| 359 | + return false; |
| 360 | + } |
| 361 | + bytes_recv += (size_t)n; |
360 | 362 | }
|
361 | 363 | return true;
|
362 | 364 | }
|
363 | 365 |
|
364 | 366 |
|
| 367 | + |
365 | 368 | static bool send_msg(sockfd_t sockfd, const void * msg, size_t msg_size) {
|
366 | 369 | if (!send_data(sockfd, &msg_size, sizeof(msg_size))) {
|
367 | 370 | return false;
|
|
0 commit comments