uint8_t sa_data[14];
};
+ssize_t recv(int __fd, void *__buf, size_t __len, int __flags);
+ssize_t recvfrom(int __fd, void *__buf, size_t __len, int __flags,
+ struct sockaddr *__addr, socklen_t *__addrlen);
+ssize_t send(int __fd, const void *__buf, size_t __len, int __flags);
+ssize_t sendto(int __fd, const void *__buf, size_t __len, int __flags,
+ const struct sockaddr *__addr, socklen_t __addrlen);
+
#endif
--- /dev/null
+#include <sys/types.h>
+#include <sys/socket.h>
+
+ssize_t recv(int fd, void *buf, size_t len, int flags)
+{
+ return recvfrom(fd, buf, len, flags, NULL, NULL);
+}
--- /dev/null
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <string.h>
+#include <syscalls.h>
+
+ssize_t recvfrom(int fd, void *buf, size_t len, int flags, struct sockaddr *addr,
+ socklen_t *addr_len)
+{
+ struct _sockio tmp;
+ int err;
+ tmp.sio_flags = flags;
+ tmp.sio_addr_len = 0;
+ if (addr) {
+ tmp.sio_addr_len = sizeof(tmp.sio_addr);
+ if (tmp.sio_addr_len < *addr_len)
+ tmp.sio_addr_len = *addr_len;
+ }
+ err = _recvfrom(fd, buf, len, &tmp);
+ if (err == 0 && tmp.sio_addr_len) {
+ memcpy(addr, tmp.sio_addr, tmp.sio_addr_len);
+ if (addr_len)
+ *addr_len = tmp.sio_addr_len;
+ }
+ return err;
+}
\ No newline at end of file
--- /dev/null
+#include <sys/types.h>
+#include <sys/socket.h>
+
+ssize_t send(int fd, void *buf, size_t len, int flags)
+{
+ return sendto(fd, buf, len, flags, NULL, 0);
+}
--- /dev/null
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <string.h>
+#include <syscalls.h>
+
+ssize_t sendto(int fd, void *buf, size_t len, int flags, struct sockaddr *addr,
+ socklen_t addr_len)
+{
+ struct _sockio tmp;
+ tmp.sio_flags = flags;
+ tmp.sio_addr_len = 0;
+ if (addr) {
+ int len = sizeof(tmp.sio_addr);
+ if(addr_len < len)
+ len = addr_len;
+ tmp.sio_addr_len = len;
+ memcpy(tmp.sio_addr, addr, addr_len);
+ }
+ return _sendto(fd, buf, len, &tmp);
+}
\ No newline at end of file