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:
parent
1e5e44a9a5
commit
d35bd22992
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue