summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/Socket/socketpair.t3
-rw-r--r--hints/vos.sh3
-rw-r--r--vos/vos.c21
-rw-r--r--vos/vosish.h3
4 files changed, 26 insertions, 4 deletions
diff --git a/ext/Socket/socketpair.t b/ext/Socket/socketpair.t
index d70f1642c4..6549eae062 100644
--- a/ext/Socket/socketpair.t
+++ b/ext/Socket/socketpair.t
@@ -57,7 +57,8 @@ if( !$Config{d_alarm} ) {
} else {
# This should fail but not die if there is real socketpair
eval {socketpair LEFT, RIGHT, -1, -1, -1};
- if ($@ =~ /^Unsupported socket function "socketpair" called/) {
+ if ($@ =~ /^Unsupported socket function "socketpair" called/ ||
+ $! =~ /^The operation requested is not supported./) { # Stratus VOS
plan skip_all => 'No socketpair (real or emulated)';
} else {
eval {AF_UNIX};
diff --git a/hints/vos.sh b/hints/vos.sh
index f3bd74d7e3..f9b9a88986 100644
--- a/hints/vos.sh
+++ b/hints/vos.sh
@@ -91,3 +91,6 @@ dont_use_nlink=define
# Tell Configure where to find the hosts file.
hostcat="cat /system/stcp/hosts"
+
+# VOS does not have socketpair() but we supply one in vos.c
+d_sockpair="define"
diff --git a/vos/vos.c b/vos/vos.c
index c3566d4a8e..a72614c3f3 100644
--- a/vos/vos.c
+++ b/vos/vos.c
@@ -1,14 +1,17 @@
/* Beginning of modification history */
/* Written 02-01-02 by Nick Ing-Simmons (nick@ing-simmons.net) */
+/* Modified 02-03-27 by Paul Green (Paul.Green@stratus.com) to
+ add socketpair() dummy. */
/* End of modification history */
-/* VOS doesn't supply a truncate function, so we build one up
- from the available POSIX functions. */
-
+#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
+/* VOS doesn't supply a truncate function, so we build one up
+ from the available POSIX functions. */
+
int
truncate(const char *path, off_t len)
{
@@ -20,3 +23,15 @@ truncate(const char *path, off_t len)
}
return code;
}
+
+/* VOS doesn't implement AF_UNIX (AF_LOCAL) style sockets, and
+ the perl emulation of them hangs on VOS (due to stcp-1257),
+ so we supply this version that always fails. */
+
+int
+socketpair (int family, int type, int protocol, int fd[2]) {
+ fd[0] = 0;
+ fd[1] = 0;
+ errno = ENOSYS;
+ return -1;
+}
diff --git a/vos/vosish.h b/vos/vosish.h
index 5befc6586a..dfddd31fd7 100644
--- a/vos/vosish.h
+++ b/vos/vosish.h
@@ -9,3 +9,6 @@ extern int ioctl (int fd, int request, ...);
/* Specify a prototype for truncate() since we are supplying one. */
extern int truncate (const char *path, off_t len);
+
+/* Specify a prototype for socketpair() since we supplying one. */
+extern int socketpair (int family, int type, int protocol, int fd[2]);