| 494 | } |
| 495 | |
| 496 | inline void SetSockAddr(const char *address_str, uint16_t server_port, |
| 497 | struct sockaddr_storage *saddr, sa_family_t ai_family){ |
| 498 | struct sockaddr_in *sa_in; |
| 499 | struct sockaddr_in6 *sa_in6; |
| 500 | |
| 501 | /* The server will listen on INADDR_ANY */ |
| 502 | memset(saddr, 0, sizeof(*saddr)); |
| 503 | |
| 504 | switch (ai_family) { |
| 505 | case AF_INET: |
| 506 | sa_in = (struct sockaddr_in*)saddr; |
| 507 | if (address_str != NULL) { |
| 508 | inet_pton(AF_INET, address_str, &sa_in->sin_addr); |
| 509 | } else { |
| 510 | sa_in->sin_addr.s_addr = INADDR_ANY; |
| 511 | } |
| 512 | sa_in->sin_family = AF_INET; |
| 513 | sa_in->sin_port = htons(server_port); |
| 514 | break; |
| 515 | case AF_INET6: |
| 516 | sa_in6 = (struct sockaddr_in6*)saddr; |
| 517 | if (address_str != NULL) { |
| 518 | inet_pton(AF_INET6, address_str, &sa_in6->sin6_addr); |
| 519 | } else { |
| 520 | sa_in6->sin6_addr = in6addr_any; |
| 521 | } |
| 522 | sa_in6->sin6_family = AF_INET6; |
| 523 | sa_in6->sin6_port = htons(server_port); |
| 524 | break; |
| 525 | default: |
| 526 | fprintf(stderr, "Invalid address family"); |
| 527 | break; |
| 528 | } |
| 529 | } |
| 530 | |
| 531 | inline bool ReadSocketMessage(int sock, uint8_t* buffer, size_t buffer_size) { |
| 532 | if (sock < 0 || !buffer) { |