mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-02-12 12:09:18 +08:00
Cygwin: AF_UNIX: Implement read, readv, recvfrom, write, writev, sendto
All of these functions just call recvfrom/sendmsg which are still TODO Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
d7f7d292d8
commit
5bb4cc1e6c
@ -1545,18 +1545,33 @@ fhandler_socket_unix::getpeereid (pid_t *pid, uid_t *euid, gid_t *egid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
fhandler_socket_unix::recvfrom (void *ptr, size_t len, int flags,
|
fhandler_socket_unix::recvmsg (struct msghdr *msg, int flags)
|
||||||
struct sockaddr *from, int *fromlen)
|
|
||||||
{
|
{
|
||||||
set_errno (EAFNOSUPPORT);
|
set_errno (EAFNOSUPPORT);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
fhandler_socket_unix::recvmsg (struct msghdr *msg, int flags)
|
fhandler_socket_unix::recvfrom (void *ptr, size_t len, int flags,
|
||||||
|
struct sockaddr *from, int *fromlen)
|
||||||
{
|
{
|
||||||
set_errno (EAFNOSUPPORT);
|
struct iovec iov;
|
||||||
return -1;
|
struct msghdr msg;
|
||||||
|
ssize_t ret;
|
||||||
|
|
||||||
|
iov.iov_base = ptr;
|
||||||
|
iov.iov_len = len;
|
||||||
|
msg.msg_name = from;
|
||||||
|
msg.msg_namelen = from && fromlen ? *fromlen : 0;
|
||||||
|
msg.msg_iov = &iov;
|
||||||
|
msg.msg_iovlen = 1;
|
||||||
|
msg.msg_control = NULL;
|
||||||
|
msg.msg_controllen = 0;
|
||||||
|
msg.msg_flags = 0;
|
||||||
|
ret = recvmsg (&msg, flags);
|
||||||
|
if (ret >= 0 && from && fromlen)
|
||||||
|
*fromlen = msg.msg_namelen;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void __reg3
|
void __reg3
|
||||||
@ -1564,21 +1579,35 @@ fhandler_socket_unix::read (void *ptr, size_t& len)
|
|||||||
{
|
{
|
||||||
set_errno (EAFNOSUPPORT);
|
set_errno (EAFNOSUPPORT);
|
||||||
len = 0;
|
len = 0;
|
||||||
|
struct iovec iov;
|
||||||
|
struct msghdr msg;
|
||||||
|
|
||||||
|
iov.iov_base = ptr;
|
||||||
|
iov.iov_len = len;
|
||||||
|
msg.msg_name = NULL;
|
||||||
|
msg.msg_namelen = 0;
|
||||||
|
msg.msg_iov = &iov;
|
||||||
|
msg.msg_iovlen = 1;
|
||||||
|
msg.msg_control = NULL;
|
||||||
|
msg.msg_controllen = 0;
|
||||||
|
msg.msg_flags = 0;
|
||||||
|
len = recvmsg (&msg, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t __stdcall
|
ssize_t __stdcall
|
||||||
fhandler_socket_unix::readv (const struct iovec *, int iovcnt, ssize_t tot)
|
fhandler_socket_unix::readv (const struct iovec *const iov, int iovcnt,
|
||||||
|
ssize_t tot)
|
||||||
{
|
{
|
||||||
set_errno (EAFNOSUPPORT);
|
struct msghdr msg;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t
|
msg.msg_name = NULL;
|
||||||
fhandler_socket_unix::sendto (const void *in_ptr, size_t len, int flags,
|
msg.msg_namelen = 0;
|
||||||
const struct sockaddr *to, int tolen)
|
msg.msg_iov = (struct iovec *) iov;
|
||||||
{
|
msg.msg_iovlen = iovcnt;
|
||||||
set_errno (EAFNOSUPPORT);
|
msg.msg_control = NULL;
|
||||||
return -1;
|
msg.msg_controllen = 0;
|
||||||
|
msg.msg_flags = 0;
|
||||||
|
return recvmsg (&msg, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
@ -1588,18 +1617,57 @@ fhandler_socket_unix::sendmsg (const struct msghdr *msg, int flags)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t __stdcall
|
ssize_t
|
||||||
fhandler_socket_unix::write (const void *ptr, size_t len)
|
fhandler_socket_unix::sendto (const void *in_ptr, size_t len, int flags,
|
||||||
|
const struct sockaddr *to, int tolen)
|
||||||
{
|
{
|
||||||
set_errno (EAFNOSUPPORT);
|
struct iovec iov;
|
||||||
return -1;
|
struct msghdr msg;
|
||||||
|
|
||||||
|
iov.iov_base = (void *) in_ptr;
|
||||||
|
iov.iov_len = len;
|
||||||
|
msg.msg_name = (void *) to;
|
||||||
|
msg.msg_namelen = to ? tolen : 0;
|
||||||
|
msg.msg_iov = &iov;
|
||||||
|
msg.msg_iovlen = 1;
|
||||||
|
msg.msg_control = NULL;
|
||||||
|
msg.msg_controllen = 0;
|
||||||
|
msg.msg_flags = 0;
|
||||||
|
return sendmsg (&msg, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t __stdcall
|
ssize_t __stdcall
|
||||||
fhandler_socket_unix::writev (const struct iovec *, int iovcnt, ssize_t tot)
|
fhandler_socket_unix::write (const void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
set_errno (EAFNOSUPPORT);
|
struct iovec iov;
|
||||||
return -1;
|
struct msghdr msg;
|
||||||
|
|
||||||
|
iov.iov_base = (void *) ptr;
|
||||||
|
iov.iov_len = len;
|
||||||
|
msg.msg_name = NULL;
|
||||||
|
msg.msg_namelen = 0;
|
||||||
|
msg.msg_iov = &iov;
|
||||||
|
msg.msg_iovlen = 1;
|
||||||
|
msg.msg_control = NULL;
|
||||||
|
msg.msg_controllen = 0;
|
||||||
|
msg.msg_flags = 0;
|
||||||
|
return sendmsg (&msg, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ssize_t __stdcall
|
||||||
|
fhandler_socket_unix::writev (const struct iovec *const iov, int iovcnt,
|
||||||
|
ssize_t tot)
|
||||||
|
{
|
||||||
|
struct msghdr msg;
|
||||||
|
|
||||||
|
msg.msg_name = NULL;
|
||||||
|
msg.msg_namelen = 0;
|
||||||
|
msg.msg_iov = (struct iovec *) iov;
|
||||||
|
msg.msg_iovlen = iovcnt;
|
||||||
|
msg.msg_control = NULL;
|
||||||
|
msg.msg_controllen = 0;
|
||||||
|
msg.msg_flags = 0;
|
||||||
|
return sendmsg (&msg, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
Loading…
x
Reference in New Issue
Block a user