Skip to content

Commit

Permalink
Refactor get_port to use FNV-1a hash for consistency across platforms (
Browse files Browse the repository at this point in the history
…#634)

Fix ZMQ issue caused by mismatched port values between macOS and Linux
  • Loading branch information
deanlee authored Nov 16, 2024
1 parent 3e17f86 commit e621ce0
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions msgq/impl_zmq.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,19 @@

#include "msgq/impl_zmq.h"

static size_t fnv1a_hash(const std::string &str) {
const size_t fnv_prime = 0x100000001b3;
size_t hash_value = 0xcbf29ce484222325;
for (char c : str) {
hash_value ^= (unsigned char)c;
hash_value *= fnv_prime;
}
return hash_value;
}

//FIXME: This is a hack to get the port number from the socket name, might have collisions
static int get_port(std::string endpoint) {
std::hash<std::string> hasher;
size_t hash_value = hasher(endpoint);
size_t hash_value = fnv1a_hash(endpoint);
int start_port = 8023;
int max_port = 65535;
int port = start_port + (hash_value % (max_port - start_port));
Expand Down

0 comments on commit e621ce0

Please sign in to comment.