Fix soc_read/soc_write.

This commit is contained in:
mtheall 2015-01-27 17:06:30 -06:00 committed by Dave Murphy
parent e4b636ed41
commit 2cf2b7f1e9
4 changed files with 22 additions and 8 deletions

View File

@ -3,6 +3,7 @@
#include <errno.h>
#include <string.h>
#include <sys/iosupport.h>
#include <sys/socket.h>
#include <3ds/types.h>
#include <3ds/svc.h>
#include <3ds/srv.h>
@ -29,3 +30,7 @@ soc_get_fd(int fd)
}
s32 _net_convert_error(s32 sock_retval);
ssize_t soc_recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t soc_sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

View File

@ -166,7 +166,7 @@ soc_write(struct _reent *r,
size_t len)
{
Handle sockfd = *(Handle*)fd;
return send(sockfd, ptr, len, 0);
return soc_sendto(sockfd, ptr, len, 0, NULL, 0);
}
static ssize_t
@ -176,5 +176,5 @@ soc_read(struct _reent *r,
size_t len)
{
Handle sockfd = *(Handle*)fd;
return recv(sockfd, ptr, len, 0);
return soc_recvfrom(sockfd, ptr, len, 0, NULL, 0);
}

View File

@ -118,6 +118,12 @@ ssize_t socuipc_cmd8(int sockfd, void *buf, size_t len, int flags, struct sockad
return ret;
}
ssize_t soc_recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
{
if(len < 0x2000)
return socuipc_cmd8(sockfd, buf, len, flags, src_addr, addrlen);
return socuipc_cmd7(sockfd, buf, len, flags, src_addr, addrlen);
}
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
{
@ -127,7 +133,5 @@ ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *
return -1;
}
if(len < 0x2000)
return socuipc_cmd8(sockfd, buf, len, flags, src_addr, addrlen);
return socuipc_cmd7(sockfd, buf, len, flags, src_addr, addrlen);
return soc_recvfrom(sockfd, buf, len, flags, src_addr, addrlen);
}

View File

@ -110,6 +110,13 @@ ssize_t socuipc_cmda(int sockfd, const void *buf, size_t len, int flags, const s
return ret;
}
ssize_t soc_sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
{
if(len < 0x2000)
return socuipc_cmda(sockfd, buf, len, flags, dest_addr, addrlen);
return socuipc_cmd9(sockfd, buf, len, flags, dest_addr, addrlen);
}
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
{
sockfd = soc_get_fd(sockfd);
@ -118,7 +125,5 @@ ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct
return -1;
}
if(len < 0x2000)
return socuipc_cmda(sockfd, buf, len, flags, dest_addr, addrlen);
return socuipc_cmd9(sockfd, buf, len, flags, dest_addr, addrlen);
return soc_sendto(sockfd, buf, len, flags, dest_addr, addrlen);
}