Initial revision
authorroland <roland>
Sat, 8 Feb 1992 07:15:17 +0000 (07:15 +0000)
committerroland <roland>
Sat, 8 Feb 1992 07:15:17 +0000 (07:15 +0000)
sysdeps/mach/hurd/accept.c [new file with mode: 0644]
sysdeps/mach/hurd/bind.c [new file with mode: 0644]
sysdeps/mach/hurd/connect.c [new file with mode: 0644]
sysdeps/mach/hurd/getpeername.c [new file with mode: 0644]
sysdeps/mach/hurd/getsockname.c [new file with mode: 0644]
sysdeps/mach/hurd/listen.c [new file with mode: 0644]
sysdeps/mach/hurd/socket.c [new file with mode: 0644]

diff --git a/sysdeps/mach/hurd/accept.c b/sysdeps/mach/hurd/accept.c
new file mode 100644 (file)
index 0000000..8b84f97
--- /dev/null
@@ -0,0 +1,49 @@
+/* Copyright (C) 1992 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <hurd.h>
+
+/* Await a connection on socket FD.
+   When a connection arrives, open a new socket to communicate with it,
+   set *ADDR (which is *ADDR_LEN bytes long) to the address of the connecting
+   peer and *ADDR_LEN to the address's actual length, and return the
+   new socket's descriptor, or -1 for errors.  */
+int
+DEFUN(accept, (fd, addr, addr_len),
+      int fd AND struct sockaddr *addr AND size_t *addr_len)
+{
+  socket_t new;
+  addr_port_t aport;
+  int d;
+  error_t err = _HURD_DPORT_USE (fd, __socket_accept (port, &new, &aport));
+  if (err)
+    return __hurd_fail (err);
+  if (addr != NULL)
+    err = __socket_whatis_address (aport, addr, addr_len);
+  __mach_port_deallocate (__mach_task_self (), aport);
+  if (err)
+    {
+      __mach_port_deallocate (__mach_task_self (), new);
+      return __hurd_fail (err);
+    }
+
+  return _hurd_dalloc (new, 0);
+}
diff --git a/sysdeps/mach/hurd/bind.c b/sysdeps/mach/hurd/bind.c
new file mode 100644 (file)
index 0000000..0f3fdf3
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 1992 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <hurd.h>
+
+/* Give the socket FD the local address ADDR (which is LEN bytes long).  */
+int
+DEFUN(bind, (fd, addr, len),
+      int fd AND struct sockaddr *addr AND size_t len)
+{
+  return _HURD_DPORT_USE
+    (fd,
+     ({
+       error_t err;
+       addr_port_t aport;
+       err = __socket_create_address (port, addr, len, &aport, 1);
+       err ? __hurd_fail (err) : 0;
+     }));
+}
diff --git a/sysdeps/mach/hurd/connect.c b/sysdeps/mach/hurd/connect.c
new file mode 100644 (file)
index 0000000..5d065a2
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright (C) 1992 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <hurd.h>
+
+/* Open a connection on socket FD to peer at ADDR (which LEN bytes long).
+   For connectionless socket types, just set the default address to send to
+   and the only address from which to accept transmissions.
+   Return 0 on success, -1 for errors.  */
+int
+DEFUN(connect, (fd, addr, len),
+      int fd AND struct sockaddr *addr AND size_t len)
+{
+  return _HURD_DPORT_USE
+    (fd,
+     ({
+       error_t err;
+       addr_port_t aport;
+       err = __socket_create_address (port, addr, len, &aport, 0);
+       if (!err)
+        {
+          err = __socket_connect (port, aport);
+          __mach_port_deallocate (__mach_task_self (), aport);
+        }
+       err ? __hurd_fail (err) : 0;
+     }));
+}
diff --git a/sysdeps/mach/hurd/getpeername.c b/sysdeps/mach/hurd/getpeername.c
new file mode 100644 (file)
index 0000000..eafc139
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright (C) 1992 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <hurd.h>
+
+/* Put the address of the peer connected to socket FD into *ADDR
+   (which is *LEN bytes long), and its actual length into *LEN.  */
+int
+DEFUN(getpeername, (fd, addr, len),
+      int fd AND struct sockaddr *addr AND size_t *len)
+{
+  return _HURD_DPORT_USE
+    (fd,
+     ({
+       error_t err;
+       addr_port_t aport;
+       err = __socket_peername (port, &aport);
+       if (!err)
+        {
+          err = __socket_whatis_address (aport, addr, len);
+          __mach_port_deallocate (__mach_task_self (), aport);
+        }
+       err ? __hurd_fail (err) : 0;
+     }));
+}
diff --git a/sysdeps/mach/hurd/getsockname.c b/sysdeps/mach/hurd/getsockname.c
new file mode 100644 (file)
index 0000000..ac5ea3f
--- /dev/null
@@ -0,0 +1,42 @@
+/* Copyright (C) 1992 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <hurd.h>
+
+/* Put the local address of FD into *ADDR and its length in *LEN.  */
+int
+DEFUN(getsockname, (fd, addr, len),
+      int fd AND struct sockaddr *addr AND size_t *len)
+{
+  return _HURD_DPORT_USE
+    (fd,
+     ({
+       error_t err;
+       addr_port_t aport;
+       err = __socket_name (port, &aport);
+       if (!err)
+        {
+          err = __socket_whatis_address (aport, addr, len);
+          __mach_port_deallocate (__mach_task_self (), aport);
+        }
+       err ? __hurd_fail (err) : 0;
+     }));
+}
diff --git a/sysdeps/mach/hurd/listen.c b/sysdeps/mach/hurd/listen.c
new file mode 100644 (file)
index 0000000..e4e340f
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 1992 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <hurd.h>
+
+/* Prepare to accept connections on socket FD.
+   N connection requests will be queued before further requests are refused.
+   Returns 0 on success, -1 for errors.  */
+int
+DEFUN(listen, (fd, n),
+      int fd AND unsigned int n)
+{
+  error_t err = _HURD_DPORT_USE (fd, __socket_listen (port, n));
+  if (err)
+    return __hurd_fail (err);
+  return 0;
+}
diff --git a/sysdeps/mach/hurd/socket.c b/sysdeps/mach/hurd/socket.c
new file mode 100644 (file)
index 0000000..a698fff
--- /dev/null
@@ -0,0 +1,41 @@
+/* Copyright (C) 1992 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <hurd.h>
+
+/* Create a new socket of type TYPE in domain DOMAIN, using
+   protocol PROTOCOL.  If PROTOCOL is zero, one is chosen automatically.
+   Returns a file descriptor for the new socket, or -1 for errors.  */
+int
+DEFUN(socket, (domain, type, protocol),
+      int domain AND enum __socket_type type AND int protocol)
+{
+  error_t err;
+  socket_t server = _hurd_socket_server (domain), sock;
+
+  if (server == MACH_PORT_NULL)
+    return -1;
+
+  if (err = __socket_create (server, type, protocol, &sock))
+    return __hurd_fail (err);
+
+  return _hurd_dalloc (sock, 0);
+}