mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-02-20 17:52:46 +00:00
getsockname() fix
This commit is contained in:
parent
e3eea6fcbd
commit
9063209124
@ -953,7 +953,6 @@ int getsockname(GETSOCKNAME_SIG)
|
||||
if(!is_mapped_to_service(sockfd))
|
||||
return realgetsockname(sockfd, addr, addrlen);
|
||||
|
||||
dwr(MSG_DEBUG, "getsockname(): sockfd = %d is mapped\n", sockfd);
|
||||
/* This is kind of a hack as it stands -- assumes sockaddr is sockaddr_in
|
||||
* and is an IPv4 address. */
|
||||
|
||||
@ -967,30 +966,15 @@ int getsockname(GETSOCKNAME_SIG)
|
||||
memcpy(&cmd[1], &rpc_st, sizeof(struct getsockname_st));
|
||||
send_cmd(fdret_sock, cmd);
|
||||
|
||||
//pthread_mutex_lock(&lock);
|
||||
/* read address info from service */
|
||||
char addrbuf[sizeof(struct sockaddr_storage)];
|
||||
memset(&addrbuf, '\0', sizeof(struct sockaddr_storage));
|
||||
int n = read(fdret_sock, &addrbuf, sizeof(struct sockaddr_storage));
|
||||
dwr(MSG_DEBUG, "getsockname(): read %d bytes\n", n);
|
||||
memset(&addrbuf, 0, sizeof(struct sockaddr_storage));
|
||||
read(fdret_sock, &addrbuf, sizeof(struct sockaddr_storage));
|
||||
struct sockaddr_storage sock_storage;
|
||||
memcpy(&sock_storage, &addrbuf, sizeof(struct sockaddr_storage));
|
||||
|
||||
struct sockaddr_in *connaddr = (struct sockaddr_in *)&sock_storage;
|
||||
//addr = (struct sockaddr *)&sock_storage;
|
||||
|
||||
unsigned int ip = connaddr->sin_addr.s_addr;
|
||||
unsigned char d[4];
|
||||
d[0] = ip & 0xFF;
|
||||
d[1] = (ip >> 8) & 0xFF;
|
||||
d[2] = (ip >> 16) & 0xFF;
|
||||
d[3] = (ip >> 24) & 0xFF;
|
||||
int port = connaddr->sin_port;
|
||||
dwr(MSG_ERROR, "getsockname(): %d.%d.%d.%d: %d\n", d[0],d[1],d[2],d[3], ntohs(port));
|
||||
|
||||
//pthread_mutex_unlock(&lock);
|
||||
addr->sa_family = AF_INET;
|
||||
memcpy(&sock_storage, addrbuf, sizeof(struct sockaddr_storage));
|
||||
*addrlen = sizeof(struct sockaddr_in);
|
||||
memcpy(addr, &sock_storage, (*addrlen > sizeof(sock_storage)) ? sizeof(sock_storage) : *addrlen);
|
||||
addr->sa_family = AF_INET;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user