Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2002-04-12 18:52:36 +0400
committerCorinna Vinschen <corinna@vinschen.de>2002-04-12 18:52:36 +0400
commit4deace13e4751f81db731dd18eb6aacd8963233e (patch)
tree41cc20949ef2df9b3b1e94210351986d83c9a378 /winsup
parentfcd631cf70fa7b10e8ee02799b54f75445d2dfc1 (diff)
* net.cc (cygwin_accept): Set socket type for accepted socket.
(socketpair): Set socket type for both sockets. From Egor Duda <deo@logos-m.ru>: * fhandler.h (class fhandler_socket): New member to store socket type. (fhandler_socket::get_socket_type): Access it. (fhandler_socket::set_socket_type): Ditto. * net.cc (cygwin_socket): Store socket type. (cygwin_connect): Disable security checks for connectionless sockets. (cygwin_accept): Ditto.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog14
-rw-r--r--winsup/cygwin/fhandler.h3
-rw-r--r--winsup/cygwin/net.cc31
3 files changed, 40 insertions, 8 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 45925f179..b74c6627e 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,17 @@
+2002-04-12 Corinna Vinschen <corinna@vinschen.de>
+
+ * net.cc (cygwin_accept): Set socket type for accepted socket.
+ (socketpair): Set socket type for both sockets.
+
+2002-04-12 Egor Duda <deo@logos-m.ru>
+
+ * fhandler.h (class fhandler_socket): New member to store socket type.
+ (fhandler_socket::get_socket_type): Access it.
+ (fhandler_socket::set_socket_type): Ditto.
+ * net.cc (cygwin_socket): Store socket type.
+ (cygwin_connect): Disable security checks for connectionless sockets.
+ (cygwin_accept): Ditto.
+
2002-04-09 Mark Bradshaw <bradshaw@staff.crosswalk.com>
* cygwin.din: Add strptime.
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 3cad291d0..cc54024be 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -357,6 +357,7 @@ class fhandler_socket: public fhandler_base
{
private:
int addr_family;
+ int type;
int connect_secret [4];
HANDLE secret_event;
struct _WSAPROTOCOL_INFOA *prot_info_ptr;
@@ -397,6 +398,8 @@ class fhandler_socket: public fhandler_base
select_record *select_except (select_record *s);
void set_addr_family (int af) {addr_family = af;}
int get_addr_family () {return addr_family;}
+ void set_socket_type (int st) { type = st;}
+ int get_socket_type () {return type;}
void set_sun_path (const char *path);
char *get_sun_path () {return sun_path;}
void set_connect_secret ();
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc
index 17826d628..c7b1302e6 100644
--- a/winsup/cygwin/net.cc
+++ b/winsup/cygwin/net.cc
@@ -518,6 +518,7 @@ cygwin_socket (int af, int type, int protocol)
{
int res = -1;
SOCKET soc = 0;
+ fhandler_socket* fh = NULL;
cygheap_fdnew fd;
@@ -539,7 +540,12 @@ cygwin_socket (int af, int type, int protocol)
else
name = (type == SOCK_STREAM ? "/dev/streamsocket" : "/dev/dgsocket");
- fdsock (fd, name, soc)->set_addr_family (af);
+ fh = fdsock (fd, name, soc);
+ if (fh)
+ {
+ fh->set_addr_family (af);
+ fh->set_socket_type (type);
+ }
res = fd;
}
@@ -881,7 +887,8 @@ cygwin_connect (int fd,
}
set_winsock_errno ();
}
- if (sock->get_addr_family () == AF_LOCAL)
+ if (sock->get_addr_family () == AF_LOCAL &&
+ sock->get_socket_type () == SOCK_STREAM)
{
if (!res || in_progress)
{
@@ -1199,7 +1206,8 @@ cygwin_accept (int fd, struct sockaddr *peer, int *len)
WSAGetLastError () == WSAEWOULDBLOCK)
in_progress = TRUE;
- if (sock->get_addr_family () == AF_LOCAL)
+ if (sock->get_addr_family () == AF_LOCAL &&
+ sock->get_socket_type () == SOCK_STREAM)
{
if ((SOCKET) res != (SOCKET) INVALID_SOCKET || in_progress)
{
@@ -1242,6 +1250,7 @@ cygwin_accept (int fd, struct sockaddr *peer, int *len)
if (sock->get_addr_family () == AF_LOCAL)
res_fh->set_sun_path (sock->get_sun_path ());
res_fh->set_addr_family (sock->get_addr_family ());
+ res_fh->set_socket_type (sock->get_socket_type ());
res = res_fd;
}
}
@@ -2266,6 +2275,7 @@ socketpair (int family, int type, int protocol, int *sb)
struct sockaddr_in sock_in, sock_out;
int len;
cygheap_fdnew sb0;
+ fhandler_socket *fh;
if (__check_null_invalid_struct_errno (sb, 2 * sizeof(int)))
return -1;
@@ -2417,25 +2427,30 @@ socketpair (int family, int type, int protocol, int *sb)
if (family == AF_LOCAL)
{
- fhandler_socket *fh;
fh = fdsock (sb[0],
type == SOCK_STREAM ? "/dev/streamsocket" : "/dev/dgsocket",
insock);
fh->set_sun_path ("");
fh->set_addr_family (AF_LOCAL);
+ fh->set_socket_type (type);
fh = fdsock (sb[1],
type == SOCK_STREAM ? "/dev/streamsocket" : "/dev/dgsocket",
outsock);
fh->set_sun_path ("");
fh->set_addr_family (AF_LOCAL);
+ fh->set_socket_type (type);
}
else
{
- fdsock (sb[0], type == SOCK_STREAM ? "/dev/tcp" : "/dev/udp",
- insock)->set_addr_family (AF_INET);
- fdsock (sb[1], type == SOCK_STREAM ? "/dev/tcp" : "/dev/udp",
- outsock)->set_addr_family (AF_INET);
+ fh = fdsock (sb[0], type == SOCK_STREAM ? "/dev/tcp" : "/dev/udp",
+ insock);
+ fh->set_addr_family (AF_INET);
+ fh->set_socket_type (type);
+ fh = fdsock (sb[1], type == SOCK_STREAM ? "/dev/tcp" : "/dev/udp",
+ outsock);
+ fh->set_addr_family (AF_INET);
+ fh->set_socket_type (type);
}
done: