Added shutdown. EBADIOCTL in connect. Chaned some debug output.
This commit is contained in:
parent
62c08df482
commit
a7487a5c3c
@ -53,6 +53,7 @@ OBJECTS = \
|
|||||||
$(LIBRARY)(sethostent.o) \
|
$(LIBRARY)(sethostent.o) \
|
||||||
$(LIBRARY)(setsockopt.o) \
|
$(LIBRARY)(setsockopt.o) \
|
||||||
$(LIBRARY)(servxcheck.o) \
|
$(LIBRARY)(servxcheck.o) \
|
||||||
|
$(LIBRARY)(shutdown.o) \
|
||||||
$(LIBRARY)(socket.o) \
|
$(LIBRARY)(socket.o) \
|
||||||
$(LIBRARY)(strcasecmp.o) \
|
$(LIBRARY)(strcasecmp.o) \
|
||||||
|
|
||||||
@ -192,6 +193,9 @@ $(LIBRARY)(setsockopt.o): setsockopt.c
|
|||||||
$(LIBRARY)(servxcheck.o): servxcheck.c
|
$(LIBRARY)(servxcheck.o): servxcheck.c
|
||||||
$(CC1) servxcheck.c
|
$(CC1) servxcheck.c
|
||||||
|
|
||||||
|
$(LIBRARY)(shutdown.o): shutdown.c
|
||||||
|
$(CC1) shutdown.c
|
||||||
|
|
||||||
$(LIBRARY)(socket.o): socket.c
|
$(LIBRARY)(socket.o): socket.c
|
||||||
$(CC1) socket.c
|
$(CC1) socket.c
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ int connect(int socket, const struct sockaddr *address,
|
|||||||
nwio_tcpconf_t tcpconf;
|
nwio_tcpconf_t tcpconf;
|
||||||
|
|
||||||
r= ioctl(socket, NWIOGTCPCONF, &tcpconf);
|
r= ioctl(socket, NWIOGTCPCONF, &tcpconf);
|
||||||
if (r != -1 || errno != ENOTTY)
|
if (r != -1 || (errno != ENOTTY && errno != EBADIOCTL))
|
||||||
{
|
{
|
||||||
if (r == -1)
|
if (r == -1)
|
||||||
{
|
{
|
||||||
@ -68,7 +68,7 @@ static int _tcp_connect(int socket, const struct sockaddr *address,
|
|||||||
{
|
{
|
||||||
int t_errno= errno;
|
int t_errno= errno;
|
||||||
|
|
||||||
fprintf(stderr, "setconf failed: %s\n", strerror(errno));
|
fprintf(stderr, "connect(tcp) failed: %s\n", strerror(errno));
|
||||||
|
|
||||||
errno= t_errno;
|
errno= t_errno;
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ static int _tcp_connect(int socket, const struct sockaddr *address,
|
|||||||
{
|
{
|
||||||
int t_errno= 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;
|
errno= t_errno;
|
||||||
}
|
}
|
||||||
|
54
lib/ip/shutdown.c
Normal file
54
lib/ip/shutdown.c
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <signal.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
@ -12,6 +13,10 @@ static int _udp_socket(int protocol);
|
|||||||
|
|
||||||
int socket(int domain, int type, 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 (domain != AF_INET)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@ -52,6 +57,7 @@ static int _tcp_socket(int protocol)
|
|||||||
static int _udp_socket(int protocol)
|
static int _udp_socket(int protocol)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
if (protocol != 0)
|
if (protocol != 0)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
Loading…
x
Reference in New Issue
Block a user