maybe just return PID of peer process (untested):
if (getpeername(sock, (struct sockaddr*)&addr, &len)==0) {
if (addr.sa_family == AF_UNIX) {
struct ucred cred;
socklen_t cred_len = sizeof(struct ucred);
getsockopt(sock, AF_UNIX, SO_PEERCRED, &cred, &cred_len);
PeerIP = Format("#%ld", (long)cred.pid);
}
else if (addr.sa_family == AF_INET) {
//...
}
}
Tested and committed the proposed code