$(LIBRARY)(sethostent.o) \
$(LIBRARY)(setsockopt.o) \
$(LIBRARY)(servxcheck.o) \
+ $(LIBRARY)(shutdown.o) \
$(LIBRARY)(socket.o) \
$(LIBRARY)(strcasecmp.o) \
$(LIBRARY)(servxcheck.o): servxcheck.c
$(CC1) servxcheck.c
+$(LIBRARY)(shutdown.o): shutdown.c
+ $(CC1) shutdown.c
+
$(LIBRARY)(socket.o): socket.c
$(CC1) socket.c
nwio_tcpconf_t tcpconf;
r= ioctl(socket, NWIOGTCPCONF, &tcpconf);
- if (r != -1 || errno != ENOTTY)
+ if (r != -1 || (errno != ENOTTY && errno != EBADIOCTL))
{
if (r == -1)
{
{
int t_errno= errno;
- fprintf(stderr, "setconf failed: %s\n", strerror(errno));
+ fprintf(stderr, "connect(tcp) failed: %s\n", strerror(errno));
errno= t_errno;
{
int t_errno= errno;
- fprintf(stderr, "connect failed: %s\n", strerror(errno));
+ fprintf(stderr, "connect(tcp) failed: %s\n", strerror(errno));
errno= t_errno;
}
--- /dev/null
+#include <errno.h>
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+
+#include <net/gen/in.h>
+#include <net/gen/tcp.h>
+#include <net/gen/tcp_io.h>
+
+#define DEBUG 1
+
+static int _tcp_shutdown(int socket, int how);
+
+int shutdown(int socket, int how)
+{
+ int r;
+ nwio_tcpconf_t tcpconf;
+
+ r= ioctl(socket, NWIOGTCPCONF, &tcpconf);
+ if (r != -1 || errno != ENOTTY)
+ {
+ if (r == -1)
+ {
+ /* Bad file descriptor */
+ return -1;
+ }
+ return _tcp_shutdown(socket, how);
+ }
+#if DEBUG
+ fprintf(stderr, "shutdown: not implemented for fd %d\n", socket);
+#endif
+ errno= ENOSYS;
+ return -1;
+}
+
+static int _tcp_shutdown(int socket, int how)
+{
+ int r;
+
+ if (how == SHUT_WR || how == SHUT_RDWR)
+ {
+ r= ioctl(socket, NWIOTCPSHUTDOWN, NULL);
+ if (r == -1)
+ return -1;
+ if (how == SHUT_WR)
+ return 0;
+ }
+
+ /* We can't shutdown the read side of the socket. */
+ errno= ENOSYS;
+ return -1;
+}
+
+
#include <errno.h>
#include <fcntl.h>
+#include <signal.h>
#include <stdio.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol)
{
+#if DEBUG
+ fprintf(stderr, "socket: domain %d, type %d, protocol %d\n",
+ domain, type, protocol);
+#endif
if (domain != AF_INET)
{
#if DEBUG
static int _udp_socket(int protocol)
{
int fd;
+
if (protocol != 0)
{
#if DEBUG