OSDN Git Service

* net.cc (cygwin_accept): Set socket type for accepted socket.
authorcorinna <corinna>
Fri, 12 Apr 2002 14:52:35 +0000 (14:52 +0000)
committercorinna <corinna>
Fri, 12 Apr 2002 14:52:35 +0000 (14:52 +0000)
(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.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/net.cc

index 45925f1..b74c662 100644 (file)
@@ -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.
index 3cad291..cc54024 100644 (file)
@@ -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 ();
index 17826d6..c7b1302 100644 (file)
@@ -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: