Cygwin: sockets: move type and proto checks into fhandler_socket classes

Encapsulation required

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2018-02-26 17:56:47 +01:00
parent 1e5e44a9a5
commit d35bd22992
4 changed files with 47 additions and 25 deletions

View File

@ -708,6 +708,13 @@ fhandler_socket_inet::socket (int af, int type, int protocol, int flags)
SOCKET sock;
int ret;
/* This test should be covered by ::socket, but make sure we don't
accidentally try anything else. */
if (type != SOCK_STREAM && type != SOCK_DGRAM && type != SOCK_RAW)
{
set_errno (EINVAL);
return -1;
}
sock = ::socket (af, type, protocol);
if (sock == INVALID_SOCKET)
{

View File

@ -241,6 +241,16 @@ fhandler_socket_local::socket (int af, int type, int protocol, int flags)
SOCKET sock;
int ret;
if (type != SOCK_STREAM && type != SOCK_DGRAM)
{
set_errno (EINVAL);
return -1;
}
if (protocol != 0)
{
set_errno (EPROTONOSUPPORT);
return -1;
}
sock = ::socket (AF_INET, type, protocol);
if (sock == INVALID_SOCKET)
{
@ -265,6 +275,16 @@ fhandler_socket_local::socketpair (int af, int type, int protocol, int flags,
fhandler_socket_local *fh_out = reinterpret_cast<fhandler_socket_local *>
(_fh_out);
if (type != SOCK_STREAM && type != SOCK_DGRAM)
{
set_errno (EINVAL);
return -1;
}
if (protocol != 0)
{
set_errno (EPROTONOSUPPORT);
return -1;
}
/* create listening socket */
sock = ::socket (AF_INET, type, 0);
if (sock == INVALID_SOCKET)

View File

@ -229,6 +229,16 @@ fhandler_socket_unix::dup (fhandler_base *child, int flags)
int
fhandler_socket_unix::socket (int af, int type, int protocol, int flags)
{
if (type != SOCK_STREAM && type != SOCK_DGRAM)
{
set_errno (EINVAL);
return -1;
}
if (protocol != 0)
{
set_errno (EPROTONOSUPPORT);
return -1;
}
set_errno (EAFNOSUPPORT);
return -1;
}
@ -237,6 +247,16 @@ int
fhandler_socket_unix::socketpair (int af, int type, int protocol, int flags,
fhandler_socket *fh_out)
{
if (type != SOCK_STREAM && type != SOCK_DGRAM)
{
set_errno (EINVAL);
return -1;
}
if (protocol != 0)
{
set_errno (EPROTONOSUPPORT);
return -1;
}
set_errno (EAFNOSUPPORT);
return -1;
}

View File

@ -517,25 +517,10 @@ cygwin_socket (int af, int type, int protocol)
{
case AF_LOCAL:
case AF_UNIX:
if (type != SOCK_STREAM && type != SOCK_DGRAM)
{
set_errno (EINVAL);
goto done;
}
if (protocol != 0)
{
set_errno (EPROTONOSUPPORT);
goto done;
}
dev = (af == AF_LOCAL) ? af_local_dev : af_unix_dev;
break;
case AF_INET:
case AF_INET6:
if (type != SOCK_STREAM && type != SOCK_DGRAM && type != SOCK_RAW)
{
set_errno (EINVAL);
goto done;
}
dev = af_inet_dev;
break;
default:
@ -2314,16 +2299,6 @@ socketpair (int af, int type, int protocol, int *sb)
{
case AF_LOCAL:
case AF_UNIX:
if (type != SOCK_STREAM && type != SOCK_DGRAM)
{
set_errno (EINVAL);
goto done;
}
if (protocol != 0)
{
set_errno (EPROTONOSUPPORT);
goto done;
}
dev = (af == AF_LOCAL) ? af_local_dev : af_unix_dev;
break;
default: