zt_recvfrom() address update
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user