diff --git a/src/SDK_Intercept.c b/src/SDK_Intercept.c index 7679abd..42d6a0b 100644 --- a/src/SDK_Intercept.c +++ b/src/SDK_Intercept.c @@ -202,7 +202,7 @@ char *api_netpath; ssize_t recvfrom(RECVFROM_SIG) { 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 zt_recvfrom(socket, buffer, length, flags, address, address_len); } diff --git a/src/SDK_Sockets.c b/src/SDK_Sockets.c index 2707f62..cd44d88 100644 --- a/src/SDK_Sockets.c +++ b/src/SDK_Sockets.c @@ -201,30 +201,18 @@ char *api_netpath = (char *)0; ssize_t zt_recvfrom(RECVFROM_SIG) { dwr(MSG_DEBUG,"zt_recvfrom(%d)\n", socket); - // TODO: Remove for production - 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 short port; char addr_buf[sizeof(addr) + sizeof(port)]; // Since this can be called for connection-oriented sockets, // we need to check the type before we try to read the address info - //if(sock_type == SOCK_DGRAM && address != NULL && address_len != NULL) { - err = read(socket, &addr_buf, sizeof(addr_buf)); // Read prepended address info - memcpy(&addr, addr_buf, sizeof(addr)); - memcpy(&port, addr_buf+sizeof(addr), sizeof(port)); - *address_len=sizeof(addr_buf); - //} - err = read(socket, buffer, length); // Read what was placed on buffer from service + if(sock_type == SOCK_DGRAM && address != NULL && address_len != NULL) { + zt_getsockname(socket, address, address_len); + } + err = read(socket, buffer, length); if(err < 0) perror("read:\n"); - - port = htons(port); - memcpy(address->sa_data, &port, sizeof(port)); - memcpy(address->sa_data+2, &addr, sizeof(addr)); return err; } #endif diff --git a/tests/udp_server.c b/tests/udp_server.c index 0ad26f9..490f990 100755 --- a/tests/udp_server.c +++ b/tests/udp_server.c @@ -84,8 +84,8 @@ int main(int argc, char *argv[]) { exit(1); } - int port = skaddr2.sin_port; - int ip = ntohs(skaddr2.sin_addr.s_addr); + int port = ntohs(skaddr2.sin_port); + int ip = skaddr2.sin_addr.s_addr; unsigned char d[4]; d[0] = ip & 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); /* echo every datagram */ - //echo(ld); + echo(ld); return(0); }