Added shutdown. EBADIOCTL in connect. Chaned some debug output.

This commit is contained in:
Philip Homburg 2005-07-29 10:13:52 +00:00
parent 62c08df482
commit a7487a5c3c
4 changed files with 67 additions and 3 deletions

View file

@ -53,6 +53,7 @@ OBJECTS = \
$(LIBRARY)(sethostent.o) \
$(LIBRARY)(setsockopt.o) \
$(LIBRARY)(servxcheck.o) \
$(LIBRARY)(shutdown.o) \
$(LIBRARY)(socket.o) \
$(LIBRARY)(strcasecmp.o) \
@ -192,6 +193,9 @@ $(LIBRARY)(setsockopt.o): setsockopt.c
$(LIBRARY)(servxcheck.o): servxcheck.c
$(CC1) servxcheck.c
$(LIBRARY)(shutdown.o): shutdown.c
$(CC1) shutdown.c
$(LIBRARY)(socket.o): socket.c
$(CC1) socket.c

View file

@ -23,7 +23,7 @@ int connect(int socket, const struct sockaddr *address,
nwio_tcpconf_t tcpconf;
r= ioctl(socket, NWIOGTCPCONF, &tcpconf);
if (r != -1 || errno != ENOTTY)
if (r != -1 || (errno != ENOTTY && errno != EBADIOCTL))
{
if (r == -1)
{
@ -68,7 +68,7 @@ static int _tcp_connect(int socket, const struct sockaddr *address,
{
int t_errno= errno;
fprintf(stderr, "setconf failed: %s\n", strerror(errno));
fprintf(stderr, "connect(tcp) failed: %s\n", strerror(errno));
errno= t_errno;
@ -82,7 +82,7 @@ static int _tcp_connect(int socket, const struct sockaddr *address,
{
int t_errno= errno;
fprintf(stderr, "connect failed: %s\n", strerror(errno));
fprintf(stderr, "connect(tcp) failed: %s\n", strerror(errno));
errno= t_errno;
}

54
lib/ip/shutdown.c Normal file
View file

@ -0,0 +1,54 @@
#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;
}

View file

@ -1,5 +1,6 @@
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <sys/socket.h>
@ -12,6 +13,10 @@ static int _udp_socket(int protocol);
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
@ -52,6 +57,7 @@ static int _tcp_socket(int protocol)
static int _udp_socket(int protocol)
{
int fd;
if (protocol != 0)
{
#if DEBUG