zt_recvfrom() address update

This commit is contained in:
Joseph Henry
2016-06-30 16:10:51 -07:00
parent bc7e4d2af9
commit 7d6dcc55a0
3 changed files with 8 additions and 20 deletions

View File

@@ -202,7 +202,7 @@ char *api_netpath;
ssize_t recvfrom(RECVFROM_SIG) ssize_t recvfrom(RECVFROM_SIG)
{ {
dwr(MSG_DEBUG, "recvfrom(%d)\n", socket); dwr(MSG_DEBUG, "recvfrom(%d)\n", socket);
//if(!check_intercept_enabled_for_thread()) if(!check_intercept_enabled_for_thread())
return realrecvfrom(socket, buffer, length, flags, address, address_len); return realrecvfrom(socket, buffer, length, flags, address, address_len);
return zt_recvfrom(socket, buffer, length, flags, address, address_len); return zt_recvfrom(socket, buffer, length, flags, address, address_len);
} }

View File

@@ -201,30 +201,18 @@ char *api_netpath = (char *)0;
ssize_t zt_recvfrom(RECVFROM_SIG) ssize_t zt_recvfrom(RECVFROM_SIG)
{ {
dwr(MSG_DEBUG,"zt_recvfrom(%d)\n", socket); dwr(MSG_DEBUG,"zt_recvfrom(%d)\n", socket);
// TODO: Remove for production
ssize_t err; ssize_t err;
//int sock_type;
//socklen_t type_len;
//realgetsockopt(socket, SOL_SOCKET, SO_TYPE, (void *) &sock_type, &type_len);
unsigned int addr; unsigned int addr;
unsigned short port; unsigned short port;
char addr_buf[sizeof(addr) + sizeof(port)]; char addr_buf[sizeof(addr) + sizeof(port)];
// Since this can be called for connection-oriented sockets, // Since this can be called for connection-oriented sockets,
// we need to check the type before we try to read the address info // we need to check the type before we try to read the address info
//if(sock_type == SOCK_DGRAM && address != NULL && address_len != NULL) { if(sock_type == SOCK_DGRAM && address != NULL && address_len != NULL) {
err = read(socket, &addr_buf, sizeof(addr_buf)); // Read prepended address info zt_getsockname(socket, address, address_len);
memcpy(&addr, addr_buf, sizeof(addr)); }
memcpy(&port, addr_buf+sizeof(addr), sizeof(port)); err = read(socket, buffer, length);
*address_len=sizeof(addr_buf);
//}
err = read(socket, buffer, length); // Read what was placed on buffer from service
if(err < 0) if(err < 0)
perror("read:\n"); perror("read:\n");
port = htons(port);
memcpy(address->sa_data, &port, sizeof(port));
memcpy(address->sa_data+2, &addr, sizeof(addr));
return err; return err;
} }
#endif #endif

View File

@@ -84,8 +84,8 @@ int main(int argc, char *argv[]) {
exit(1); exit(1);
} }
int port = skaddr2.sin_port; int port = ntohs(skaddr2.sin_port);
int ip = ntohs(skaddr2.sin_addr.s_addr); int ip = skaddr2.sin_addr.s_addr;
unsigned char d[4]; unsigned char d[4];
d[0] = ip & 0xFF; d[0] = ip & 0xFF;
d[1] = (ip >> 8) & 0xFF; d[1] = (ip >> 8) & 0xFF;
@@ -94,6 +94,6 @@ int main(int argc, char *argv[]) {
printf(" handleBind(): %d.%d.%d.%d : %d -> Assigned: %d\n", d[0],d[1],d[2],d[3], port); printf(" handleBind(): %d.%d.%d.%d : %d -> Assigned: %d\n", d[0],d[1],d[2],d[3], port);
/* echo every datagram */ /* echo every datagram */
//echo(ld); echo(ld);
return(0); return(0);
} }