mirror of
https://repo.or.cz/socat.git
synced 2025-05-22 04:52:42 +00:00
Fixed build issues on disabled features
This commit is contained in:
parent
af7d44d751
commit
7a90caade5
21 changed files with 182 additions and 95 deletions
3
CHANGES
3
CHANGES
|
@ -7,6 +7,9 @@ Security:
|
|||
Corrections:
|
||||
Fixed display of option phases in help output.
|
||||
|
||||
Building:
|
||||
Disabling certain features during configure could break build process.
|
||||
|
||||
Testing:
|
||||
test.sh produces file results.txt with columns of test numbers, names,
|
||||
and results.
|
||||
|
|
4
fdname.c
4
fdname.c
|
@ -226,7 +226,7 @@ int sockname(int fd, FILE *outfile, char style) {
|
|||
#define FDNAME_OPTLEN 256
|
||||
#define FDNAME_NAMELEN 256
|
||||
socklen_t optlen;
|
||||
#if HAVE_GETPROTOBYNUMBER || HAVE_GETPROTOBYNUMBER_R
|
||||
#if WITH_IP && ( HAVE_GETPROTOBYNUMBER || HAVE_GETPROTOBYNUMBER_R )
|
||||
struct protoent protoent, *protoentp;
|
||||
#endif
|
||||
#define PROTONAMEMAX 1024
|
||||
|
@ -278,7 +278,7 @@ int sockname(int fd, FILE *outfile, char style) {
|
|||
Getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &optacceptconn, &optlen);
|
||||
#endif
|
||||
|
||||
#if defined(SO_PROTOCOL) || defined(SO_PROTOTYPE)
|
||||
#if WITH_IP && ( defined(SO_PROTOCOL) || defined(SO_PROTOTYPE) )
|
||||
#if HAVE_GETPROTOBYNUMBER_R==1 /* Linux */
|
||||
rc = getprotobynumber_r(proto, &protoent, protoname, sizeof(protoname), &protoentp);
|
||||
if (protoentp == NULL) {
|
||||
|
|
16
sysutils.c
16
sysutils.c
|
@ -677,7 +677,7 @@ int xiopoll(struct pollfd fds[], unsigned long nfds, struct timeval *timeout) {
|
|||
}
|
||||
|
||||
|
||||
#if WITH_TCP || WITH_UDP
|
||||
#if WITH_TCP || WITH_UDP || WITH_SCTP || WITH_DCCP || WITH_UDPLITE
|
||||
/* returns port in network byte order;
|
||||
ipproto==IPPROTO_UDP resolves as UDP service, every other value resolves as
|
||||
TCP */
|
||||
|
@ -702,10 +702,10 @@ int parseport(const char *portname, int ipproto) {
|
|||
|
||||
return se->s_port;
|
||||
}
|
||||
#endif /* WITH_TCP || WITH_UDP */
|
||||
#endif /* WITH_TCP || WITH_UDP || WITH_SCTP || WITH_DCCP || WITH_UDPLITE */
|
||||
|
||||
|
||||
#if WITH_IP4 || WITH_IP6 || WITH_INTERFACE
|
||||
#if WITH_IP4 || WITH_IP6 || _WITH_INTERFACE
|
||||
/* check the systems interfaces for ifname and return its index
|
||||
or -1 if no interface with this name was found
|
||||
The system calls require an arbitrary socket; the calling program may
|
||||
|
@ -729,8 +729,8 @@ int ifindexbyname(const char *ifname, int anysock) {
|
|||
}
|
||||
if (anysock >= 0) {
|
||||
s = anysock;
|
||||
} else if ((s = Socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) < 0) {
|
||||
Error1("socket(PF_INET, SOCK_DGRAM, IPPROTO_IP): %s", strerror(errno));
|
||||
} else if ((s = Socket(PF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||
Error1("socket(PF_INET, SOCK_DGRAM, 0): %s", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -756,10 +756,10 @@ int ifindexbyname(const char *ifname, int anysock) {
|
|||
return -1;
|
||||
#endif /* !defined(HAVE_ STRUCT_IFREQ) && defined(SIOCGIFCONF) && defined(SIOCGIFINDEX) */
|
||||
}
|
||||
#endif /* WITH_IP4 || WITH_IP6 || WITH_INTERFACE */
|
||||
#endif /* WITH_IP4 || WITH_IP6 || _WITH_INTERFACE */
|
||||
|
||||
|
||||
#if WITH_IP4 || WITH_IP6 || WITH_INTERFACE
|
||||
#if WITH_IP4 || WITH_IP6 || _WITH_INTERFACE
|
||||
/* like ifindexbyname(), but also allows the index number as input - in this
|
||||
case it does not lookup the index.
|
||||
writes the resulting index to *ifindex and returns 0,
|
||||
|
@ -783,7 +783,7 @@ int ifindex(const char *ifname, unsigned int *ifindex, int anysock) {
|
|||
*ifindex = val;
|
||||
return 0;
|
||||
}
|
||||
#endif /* WITH_IP4 || WITH_IP6 || WITH_INTERFACE */
|
||||
#endif /* WITH_IP4 || WITH_IP6 || _WITH_INTERFACE */
|
||||
|
||||
|
||||
int _xiosetenv(const char *envname, const char *value, int overwrite, const char *sep) {
|
||||
|
|
7
xio-ip.c
7
xio-ip.c
|
@ -68,7 +68,7 @@ const struct optdesc opt_ip_multicast_if ={"ip-multicast-if", "multicast-if",
|
|||
#ifdef IP_PKTOPTIONS
|
||||
const struct optdesc opt_ip_pktoptions = { "ip-pktoptions", "pktopts", OPT_IP_PKTOPTIONS, GROUP_SOCK_IP, PH_PASTSOCKET, TYPE_INT, OFUNC_SOCKOPT, SOL_IP, IP_PKTOPTIONS };
|
||||
#endif
|
||||
#ifdef IP_ADD_MEMBERSHIP
|
||||
#if defined(HAVE_STRUCT_IP_MREQ) || defined(HAVE_STRUCT_IP_MREQN)
|
||||
const struct optdesc opt_ip_add_membership = { "ip-add-membership", "membership",OPT_IP_ADD_MEMBERSHIP, GROUP_SOCK_IP, PH_PASTSOCKET, TYPE_IP_MREQN, OFUNC_SPEC, SOL_IP, IP_ADD_MEMBERSHIP };
|
||||
#endif
|
||||
#if defined(HAVE_STRUCT_IP_MREQ_SOURCE) && defined(IP_ADD_SOURCE_MEMBERSHIP)
|
||||
|
@ -1128,6 +1128,9 @@ int xiotype_ip_add_membership(
|
|||
}
|
||||
#endif /* defined(HAVE_STRUCT_IP_MREQ) || defined (HAVE_STRUCT_IP_MREQN) */
|
||||
|
||||
|
||||
#if _WITH_IP4
|
||||
|
||||
#if defined(HAVE_STRUCT_IP_MREQ) || defined (HAVE_STRUCT_IP_MREQN)
|
||||
int xioapply_ip_add_membership(
|
||||
struct single *sfd,
|
||||
|
@ -1386,6 +1389,8 @@ int xioapply_ip_add_source_membership(struct single *sfd, struct opt *opt) {
|
|||
|
||||
#endif /* HAVE_STRUCT_IP_MREQ_SOURCE */
|
||||
|
||||
#endif /* _WITH_IP4 */
|
||||
|
||||
|
||||
#if WITH_RESOLVE
|
||||
#if HAVE_RESOLV_H
|
||||
|
|
|
@ -23,7 +23,7 @@ static char *inet6addr_info(const struct in6_addr *sa, char *buff, size_t blen);
|
|||
#ifdef IPV6_V6ONLY
|
||||
const struct optdesc opt_ipv6_v6only = { "ipv6-v6only", "ipv6only", OPT_IPV6_V6ONLY, GROUP_SOCK_IP6, PH_PREBIND, TYPE_INT, OFUNC_SOCKOPT, SOL_IPV6, IPV6_V6ONLY };
|
||||
#endif
|
||||
#ifdef IPV6_JOIN_GROUP
|
||||
#if defined(HAVE_STRUCT_IP_MREQ) || defined(HAVE_STRUCT_IP_MREQN)
|
||||
const struct optdesc opt_ipv6_join_group = { "ipv6-join-group", "join-group", OPT_IPV6_JOIN_GROUP, GROUP_SOCK_IP6, PH_PASTSOCKET, TYPE_IP_MREQN, OFUNC_SPEC, SOL_IPV6, IPV6_JOIN_GROUP };
|
||||
#endif
|
||||
#ifdef MCAST_JOIN_SOURCE_GROUP
|
||||
|
|
10
xio-ipapp.c
10
xio-ipapp.c
|
@ -6,7 +6,7 @@
|
|||
|
||||
#include "xiosysincludes.h"
|
||||
|
||||
#if WITH_TCP || WITH_UDP
|
||||
#if WITH_TCP || WITH_UDP || WITH_SCTP || WITH_DCCP || WITH_UDPLITE
|
||||
|
||||
#include "xioopen.h"
|
||||
#include "xio-socket.h"
|
||||
|
@ -19,7 +19,7 @@ const struct optdesc opt_sourceport = { "sourceport", "sp", OPT_SOURCEPORT
|
|||
/*const struct optdesc opt_port = { "port", NULL, OPT_PORT, GROUP_IPAPP, PH_BIND, TYPE_USHORT, OFUNC_SPEC };*/
|
||||
const struct optdesc opt_lowport = { "lowport", NULL, OPT_LOWPORT, GROUP_IPAPP, PH_LATE, TYPE_BOOL, OFUNC_SPEC };
|
||||
|
||||
#if WITH_IP4
|
||||
#if _WITH_IP4 || _WITH_IP6
|
||||
/* we expect the form "host:port" */
|
||||
int xioopen_ipapp_connect(
|
||||
int argc,
|
||||
|
@ -276,7 +276,7 @@ int
|
|||
|
||||
return STAT_OK;
|
||||
}
|
||||
#endif /* WITH_IP4 */
|
||||
#endif /* _WITH_IP4 || _WITH_IP6 */
|
||||
|
||||
|
||||
#if WITH_TCP && WITH_LISTEN
|
||||
|
@ -382,6 +382,6 @@ int xioopen_ipapp_listen(
|
|||
return result;
|
||||
return 0;
|
||||
}
|
||||
#endif /* WITH_IP4 && WITH_TCP && WITH_LISTEN */
|
||||
#endif /* WITH_TCP && WITH_LISTEN */
|
||||
|
||||
#endif /* WITH_TCP || WITH_UDP */
|
||||
#endif /* WITH_TCP || WITH_UDP || WITH_SCTP || WITH_DCCP || WITH_UDPLITE */
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "xio-progcall.h"
|
||||
|
||||
#include "xio-socket.h"
|
||||
#include "xio-socketpair.h"
|
||||
|
||||
|
||||
/* these options are used by address pty too */
|
||||
|
@ -23,7 +24,7 @@ const struct optdesc opt_ptmx = { "ptmx", NULL, OPT_PTMX, GROUP_P
|
|||
#endif
|
||||
const struct optdesc opt_sitout_eio = { "sitout-eio", NULL, OPT_SITOUT_EIO, GROUP_PTY, PH_OFFSET, TYPE_TIMEVAL, OFUNC_OFFSET, XIO_OFFSETOF(para.exec.sitout_eio), XIO_SIZEOF(para.exec.sitout_eio) };
|
||||
|
||||
#if WITH_EXEC || WITH_SYSTEM
|
||||
#if WITH_EXEC || WITH_SYSTEM || WITH_SHELL
|
||||
|
||||
#define MAXPTYNAMELEN 64
|
||||
|
||||
|
@ -623,7 +624,7 @@ int _xioopen_foxec(int xioflags, /* XIO_RDONLY etc. */
|
|||
*optsp = popts;
|
||||
return pid; /* indicate parent (main) process */
|
||||
}
|
||||
#endif /* WITH_EXEC || WITH_SYSTEM */
|
||||
#endif /* WITH_EXEC || WITH_SYSTEM || WITH_SHELL */
|
||||
|
||||
|
||||
int setopt_path(struct opt *opts, char **path) {
|
||||
|
|
77
xio-socket.c
77
xio-socket.c
|
@ -7,8 +7,6 @@
|
|||
|
||||
#include "xiosysincludes.h"
|
||||
|
||||
#if _WITH_SOCKET
|
||||
|
||||
#include "xioopen.h"
|
||||
#include "xio-ascii.h"
|
||||
#include "xio-socket.h"
|
||||
|
@ -30,6 +28,8 @@
|
|||
#include "xio-tcpwrap.h"
|
||||
|
||||
|
||||
#if _WITH_SOCKET
|
||||
|
||||
static int xioopen_socket_connect(int argc, const char *argv[], struct opt *opts, int xioflags, xiofile_t *xfd, const struct addrdesc *addrdesc);
|
||||
static int xioopen_socket_listen(int argc, const char *argv[], struct opt *opts, int xioflags, xiofile_t *xfd, const struct addrdesc *addrdesc);
|
||||
static int xioopen_socket_sendto(int argc, const char *argv[], struct opt *opts, int xioflags, xiofile_t *xfd, const struct addrdesc *addrdesc);
|
||||
|
@ -263,7 +263,12 @@ static int xioopen_socket_connect(
|
|||
|
||||
socket_init(0, &us);
|
||||
if (retropt_bind(opts, 0 /*pf*/, socktype, proto, (struct sockaddr *)&us, &uslen, 3,
|
||||
sfd->para.socket.ip.ai_flags)
|
||||
#if _WITH_IP4 || _WITH_IP6
|
||||
sfd->para.socket.ip.ai_flags
|
||||
#else
|
||||
NULL
|
||||
#endif /* _WITH_IP4 || _WITH_IP6 */
|
||||
)
|
||||
!= STAT_NOACTION) {
|
||||
needbind = true;
|
||||
us.soa.sa_family = pf;
|
||||
|
@ -540,7 +545,12 @@ int xioopen_socket_recvfrom(
|
|||
|
||||
if (retropt_string(opts, OPT_RANGE, &rangename) >= 0) {
|
||||
if (xioparserange(rangename, 0, &sfd->para.socket.range,
|
||||
sfd->para.socket.ip.ai_flags)
|
||||
#if _WITH_IP4 || _WITH_IP6
|
||||
sfd->para.socket.ip.ai_flags
|
||||
#else
|
||||
NULL
|
||||
#endif /* _WITH_IP4 */
|
||||
)
|
||||
< 0) {
|
||||
free(rangename);
|
||||
return STAT_NORETRY;
|
||||
|
@ -626,7 +636,12 @@ int xioopen_socket_recv(
|
|||
|
||||
if (retropt_string(opts, OPT_RANGE, &rangename) >= 0) {
|
||||
if (xioparserange(rangename, 0, &sfd->para.socket.range,
|
||||
sfd->para.socket.ip.ai_flags)
|
||||
#if _WITH_IP4 || _WITH_IP6
|
||||
sfd->para.socket.ip.ai_flags
|
||||
#else
|
||||
NULL
|
||||
#endif /* _WITH_IP4 */
|
||||
)
|
||||
< 0) {
|
||||
free(rangename);
|
||||
return STAT_NORETRY;
|
||||
|
@ -712,7 +727,12 @@ static int xioopen_socket_datagram(
|
|||
/* which reply sockets will accept - determine by range option */
|
||||
if (retropt_string(opts, OPT_RANGE, &rangename) >= 0) {
|
||||
if (xioparserange(rangename, 0, &sfd->para.socket.range,
|
||||
sfd->para.socket.ip.ai_flags)
|
||||
#if _WITH_IP4 || _WITH_IP6
|
||||
sfd->para.socket.ip.ai_flags
|
||||
#else
|
||||
NULL
|
||||
#endif /* _WITH_IP4 */
|
||||
)
|
||||
< 0) {
|
||||
free(rangename);
|
||||
return STAT_NORETRY;
|
||||
|
@ -1202,6 +1222,7 @@ int _xioopen_dgram_recvfrom(struct single *sfd, int xioflags,
|
|||
}
|
||||
#endif
|
||||
|
||||
#if WITH_IP4
|
||||
/* for generic sockets, this has already been retrieved */
|
||||
if (retropt_string(opts, OPT_RANGE, &rangename) >= 0) {
|
||||
if (xioparserange(rangename, pf, &sfd->para.socket.range,
|
||||
|
@ -1213,6 +1234,7 @@ int _xioopen_dgram_recvfrom(struct single *sfd, int xioflags,
|
|||
free(rangename);
|
||||
sfd->para.socket.dorange = true;
|
||||
}
|
||||
#endif /* WITH_IP4 */
|
||||
|
||||
#if (WITH_TCP || WITH_UDP) && WITH_LIBWRAP
|
||||
xio_retropt_tcpwrap(sfd, opts);
|
||||
|
@ -1424,6 +1446,7 @@ int _xioopen_dgram_recv(struct single *sfd, int xioflags,
|
|||
}
|
||||
#endif
|
||||
|
||||
#if WITH_IP4
|
||||
if (retropt_string(opts, OPT_RANGE, &rangename) >= 0) {
|
||||
if (xioparserange(rangename, pf, &sfd->para.socket.range,
|
||||
sfd->para.socket.ip.ai_flags)
|
||||
|
@ -1434,6 +1457,7 @@ int _xioopen_dgram_recv(struct single *sfd, int xioflags,
|
|||
free(rangename);
|
||||
sfd->para.socket.dorange = true;
|
||||
}
|
||||
#endif /* WITH_IP4 */
|
||||
|
||||
#if (WITH_TCP || WITH_UDP) && WITH_LIBWRAP
|
||||
xio_retropt_tcpwrap(sfd, opts);
|
||||
|
@ -1449,7 +1473,10 @@ int _xioopen_dgram_recv(struct single *sfd, int xioflags,
|
|||
return STAT_OK;
|
||||
}
|
||||
|
||||
#endif /* _WITH_SOCKET */
|
||||
|
||||
|
||||
#if _WITH_SOCKET || _WITH_SOCKETPAIR
|
||||
int retropt_socket_pf(struct opt *opts, int *pf) {
|
||||
char *pfname;
|
||||
|
||||
|
@ -1478,8 +1505,11 @@ int retropt_socket_pf(struct opt *opts, int *pf) {
|
|||
}
|
||||
return -1;
|
||||
}
|
||||
#endif /* _WITH_SOCKET || _WITH_SOCKETPAIR */
|
||||
|
||||
|
||||
#if _WITH_SOCKET
|
||||
|
||||
/* This function calls recvmsg(..., MSG_PEEK, ...) to obtain information about
|
||||
the arriving packet, thus it does not "consume" the packet.
|
||||
In msgh the msg_name pointer must refer to an (empty) sockaddr storage.
|
||||
|
@ -1651,7 +1681,7 @@ int xiocheckpeer(xiosingle_t *sfd,
|
|||
char infobuff[256];
|
||||
int result;
|
||||
|
||||
#if WITH_IP4
|
||||
#if WITH_IP4 || WITH_IP6
|
||||
if (sfd->para.socket.dorange) {
|
||||
if (pa == NULL) { return -1; }
|
||||
if (xiocheckrange(pa, &sfd->para.socket.range) < 0) {
|
||||
|
@ -2055,9 +2085,7 @@ int xiosetsockaddrenv(const char *lr,
|
|||
# undef XIOSOCKADDRENVLEN
|
||||
}
|
||||
|
||||
#endif /* _WITH_SOCKET */
|
||||
|
||||
/* these do sockets internally */
|
||||
/* These do sockets internally */
|
||||
|
||||
/* retrieves options so-type and so-prototype from opts, calls socket, and
|
||||
ev. generates an appropriate error message.
|
||||
|
@ -2080,24 +2108,6 @@ xiosocket(struct opt *opts, int pf, int socktype, int proto, int msglevel) {
|
|||
return result;
|
||||
}
|
||||
|
||||
/* retrieves options so-type and so-prototype from opts, calls socketpair, and
|
||||
ev. generates an appropriate error message.
|
||||
returns 0 on success or -1 if an error occurred. */
|
||||
int
|
||||
xiosocketpair(struct opt *opts, int pf, int socktype, int proto, int sv[2]) {
|
||||
int result;
|
||||
|
||||
retropt_int(opts, OPT_SO_TYPE, &socktype);
|
||||
retropt_int(opts, OPT_SO_PROTOTYPE, &proto);
|
||||
result = Socketpair(pf, socktype, proto, sv);
|
||||
if (result < 0) {
|
||||
Error5("socketpair(%d, %d, %d, %p): %s",
|
||||
pf, socktype, proto, sv, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Binds a socket to a socket address. Handles IP (internet protocol), UNIX
|
||||
domain, Linux abstract UNIX domain.
|
||||
The bind address us may be NULL in which case no bind() happens, except with
|
||||
|
@ -2206,8 +2216,12 @@ int xiobind(
|
|||
if (us) {
|
||||
sinp = us;
|
||||
} else {
|
||||
if (pf == AF_INET) {
|
||||
if (0) {
|
||||
;
|
||||
#if WITH_IP4
|
||||
} else if (pf == AF_INET) {
|
||||
socket_in_init(&sin.ip4);
|
||||
#endif
|
||||
#if WITH_IP6
|
||||
} else {
|
||||
socket_in6_init(&sin.ip6);
|
||||
|
@ -2307,10 +2321,12 @@ int xiosock_reuseaddr(int fd, int ipproto, struct opt *opts)
|
|||
|
||||
val.u_int = 0;
|
||||
notnull.u_bool = false;
|
||||
#if WITH_TCP
|
||||
if (ipproto == IPPROTO_TCP) {
|
||||
val.u_int = 1;
|
||||
notnull.u_bool = true;
|
||||
}
|
||||
#endif /* WITH_TCP */
|
||||
retropt_2integrals(opts, OPT_SO_REUSEADDR, &val, ¬null);
|
||||
if (notnull.u_bool) {
|
||||
if (Setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val.u_int, sizeof(int))
|
||||
|
@ -2324,3 +2340,6 @@ int xiosock_reuseaddr(int fd, int ipproto, struct opt *opts)
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _WITH_SOCKET */
|
||||
|
||||
|
|
|
@ -135,8 +135,6 @@ extern int xioparserange(const char *rangename, int pf, struct xiorange *range,
|
|||
|
||||
extern int
|
||||
xiosocket(struct opt *opts, int pf, int socktype, int proto, int level);
|
||||
extern int
|
||||
xiosocketpair(struct opt *opts, int pf, int socktype, int proto, int sv[2]);
|
||||
extern int xiosock_reuseaddr(int fd, int ipproto, struct opt *opts);
|
||||
|
||||
#endif /* !defined(__xio_socket_h_included) */
|
||||
|
|
|
@ -95,3 +95,26 @@ static int xioopen_socketpair(
|
|||
}
|
||||
|
||||
#endif /* WITH_SOCKETPAIR */
|
||||
|
||||
|
||||
#if _WITH_SOCKETPAIR
|
||||
|
||||
/* retrieves options so-type and so-prototype from opts, calls socketpair, and
|
||||
ev. generates an appropriate error message.
|
||||
returns 0 on success or -1 if an error occurred. */
|
||||
int
|
||||
xiosocketpair(struct opt *opts, int pf, int socktype, int proto, int sv[2]) {
|
||||
int result;
|
||||
|
||||
retropt_int(opts, OPT_SO_TYPE, &socktype);
|
||||
retropt_int(opts, OPT_SO_PROTOTYPE, &proto);
|
||||
result = Socketpair(pf, socktype, proto, sv);
|
||||
if (result < 0) {
|
||||
Error5("socketpair(%d, %d, %d, %p): %s",
|
||||
pf, socktype, proto, sv, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
#endif /* _WITH_SOCKETPAIR */
|
||||
|
|
|
@ -7,4 +7,6 @@
|
|||
|
||||
const extern struct addrdesc xioaddr_socketpair;
|
||||
|
||||
extern int xiosocketpair(struct opt *opts, int pf, int socktype, int proto, int sv[2]);
|
||||
|
||||
#endif /* !defined(__xio_socketpair_h_included) */
|
||||
|
|
11
xio-socks.c
11
xio-socks.c
|
@ -6,14 +6,16 @@
|
|||
|
||||
#include "xiosysincludes.h"
|
||||
|
||||
#if WITH_SOCKS4 || WITH_SOCKS4A
|
||||
|
||||
#include "xioopen.h"
|
||||
#include "xio-ascii.h"
|
||||
#include "xio-socket.h"
|
||||
#include "xio-ip.h"
|
||||
#include "xio-ipapp.h"
|
||||
|
||||
#define SOCKSPORT "1080"
|
||||
|
||||
#if WITH_SOCKS4 || WITH_SOCKS4A
|
||||
|
||||
#include "xio-socks.h"
|
||||
|
||||
|
||||
|
@ -24,7 +26,6 @@ enum {
|
|||
SOCKS_CD_IDENTFAILED
|
||||
} ;
|
||||
|
||||
#define SOCKSPORT "1080"
|
||||
#define BUFF_LEN (SIZEOF_STRUCT_SOCKS4+512)
|
||||
|
||||
static int xioopen_socks4_connect(int argc, const char *argv[], struct opt *opts, int xioflags, xiofile_t *fd, const struct addrdesc *addrdesc);
|
||||
|
@ -229,6 +230,8 @@ static int xioopen_socks4_connect(
|
|||
return 0;
|
||||
}
|
||||
|
||||
#endif /* WITH_SOCKS4 || WITH_SOCKS4A */
|
||||
#if WITH_SOCKS4 || WITH_SOCKS4A || WITH_SOCKS5
|
||||
|
||||
int _xioopen_opt_socksport(
|
||||
struct opt *opts,
|
||||
|
@ -253,6 +256,8 @@ int _xioopen_opt_socksport(
|
|||
return 0;
|
||||
}
|
||||
|
||||
#endif /* WITH_SOCKS4 || WITH_SOCKS4A || WITH_SOCKS5 */
|
||||
#if WITH_SOCKS4 || WITH_SOCKS4A
|
||||
|
||||
int _xioopen_socks4_prepare(const char *targetport, struct opt *opts, char **socksport, struct socks4 *sockhead, size_t *headlen) {
|
||||
char *userid;
|
||||
|
|
|
@ -85,7 +85,7 @@ int _xioopen_ipdgram_listen(struct single *sfd,
|
|||
return STAT_NORETRY;
|
||||
}
|
||||
|
||||
#if WITH_IP4 /*|| WITH_IP6*/
|
||||
#if WITH_IP4 || WITH_IP6
|
||||
if (retropt_string(opts, OPT_RANGE, &rangename) >= 0) {
|
||||
if (xioparserange(rangename, pf, &sfd->para.socket.range,
|
||||
sfd->para.socket.ip.ai_flags)
|
||||
|
@ -646,7 +646,7 @@ int xioopen_udp_recv(
|
|||
}
|
||||
#endif
|
||||
|
||||
#if WITH_IP4 /*|| WITH_IP6*/
|
||||
#if WITH_IP4 || WITH_IP6
|
||||
if (retropt_string(opts, OPT_RANGE, &rangename) >= 0) {
|
||||
if (xioparserange(rangename, pf, &xfd->stream.para.socket.range,
|
||||
xfd->stream.para.socket.ip.ai_flags)
|
||||
|
|
21
xio-unix.c
21
xio-unix.c
|
@ -257,7 +257,12 @@ static int xioopen_unix_connect(
|
|||
|
||||
if (retropt_bind(opts, pf, socktype, protocol, (struct sockaddr *)&us, &uslen,
|
||||
(addrdesc->arg1/*abstract*/<<1)|sfd->para.socket.un.tight,
|
||||
sfd->para.socket.ip.ai_flags)
|
||||
#if WITH_TCP
|
||||
sfd->para.socket.ip.ai_flags
|
||||
#else
|
||||
0
|
||||
#endif /* WITH_TCP */
|
||||
)
|
||||
== STAT_OK) {
|
||||
needbind = true;
|
||||
}
|
||||
|
@ -426,7 +431,12 @@ static int xioopen_unix_sendto(
|
|||
|
||||
if (retropt_bind(opts, pf, socktype, protocol, (struct sockaddr *)&us, &uslen,
|
||||
(addrdesc->arg1/*abstract*/<<1)| sfd->para.socket.un.tight,
|
||||
sfd->para.socket.ip.ai_flags)
|
||||
#if WITH_TCP
|
||||
sfd->para.socket.ip.ai_flags
|
||||
#else
|
||||
0
|
||||
#endif /* WITH_TCP */
|
||||
)
|
||||
== STAT_OK) {
|
||||
needbind = true;
|
||||
}
|
||||
|
@ -709,7 +719,12 @@ _xioopen_unix_client(
|
|||
|
||||
if (retropt_bind(opts, pf, socktype, protocol, &us.soa, &uslen,
|
||||
(abstract<<1)|sfd->para.socket.un.tight,
|
||||
sfd->para.socket.ip.ai_flags)
|
||||
#if WITH_TCP
|
||||
sfd->para.socket.ip.ai_flags
|
||||
#else
|
||||
0
|
||||
#endif /* WITH_TCP */
|
||||
)
|
||||
!= STAT_NOACTION) {
|
||||
needbind = true;
|
||||
}
|
||||
|
|
|
@ -98,7 +98,7 @@ static int xioopen_vsock_connect(
|
|||
|
||||
ret = retropt_bind(opts, pf, socktype, protocol,
|
||||
(struct sockaddr *)&sa_local, &sa_len, 3,
|
||||
sfd->para.socket.ip.ai_flags);
|
||||
NULL);
|
||||
if (ret == STAT_NORETRY)
|
||||
return ret;
|
||||
if (ret == STAT_OK)
|
||||
|
|
18
xioconfig.h
18
xioconfig.h
|
@ -16,7 +16,13 @@
|
|||
# define WITH_OPEN 1
|
||||
#endif
|
||||
|
||||
#if WITH_OPEN || WITH_PIPE || WITH_UNIX || WITH_PTY
|
||||
#if WITH_INTERFACE || WITH_TUN
|
||||
# define _WITH_INTERFACE 1
|
||||
#else
|
||||
# define _WITH_INTERFACE 0
|
||||
#endif
|
||||
|
||||
#if WITH_OPEN || WITH_PIPE || WITH_UNIX || WITH_PTY || _WITH_INTERFACE
|
||||
# define WITH_NAMED 1
|
||||
#endif
|
||||
|
||||
|
@ -34,7 +40,7 @@
|
|||
with IP6 */
|
||||
#endif
|
||||
|
||||
#if WITH_OPENSSL
|
||||
#if WITH_OPENSSL || WITH_SOCKS5
|
||||
# define WITH_TCP 1
|
||||
# define WITH_IP4 1
|
||||
#endif
|
||||
|
@ -57,7 +63,7 @@
|
|||
# define _WITH_UDP 1
|
||||
#endif
|
||||
|
||||
#if WITH_UNIX || WITH_IP4 || WITH_IP6 || WITH_SOCKS4 || WITH_RAWIP || WITH_GENERICSOCKET
|
||||
#if WITH_UNIX || WITH_IP4 || WITH_IP6 || WITH_SOCKS4 || WITH_SOCKS5 || WITH_RAWIP || WITH_GENERICSOCKET || WITH_SOCKETPAIR || WITH_VSOCK
|
||||
# define _WITH_SOCKET 1
|
||||
#else
|
||||
# undef _WITH_SOCKET
|
||||
|
@ -71,10 +77,8 @@
|
|||
# undef WITH_LIBWRAP
|
||||
#endif
|
||||
|
||||
#if WITH_INTERFACE || WITH_TUN
|
||||
# define _WITH_INTERFACE 1
|
||||
#else
|
||||
# define _WITH_INTERFACE 0
|
||||
#if WITH_SOCKETPAIR || WITH_EXEC || WITH_SYSTEM || WITH_SHELL
|
||||
# define _WITH_SOCKETPAIR 1
|
||||
#endif
|
||||
|
||||
#if WITH_GENERICSOCKET || _WITH_INTERFACE
|
||||
|
|
16
xioopen.c
16
xioopen.c
|
@ -471,14 +471,14 @@ static xiofile_t *xioallocfd(void) {
|
|||
fd->stream.escape = -1;
|
||||
/* fd->stream.para.exec.pid = 0; */
|
||||
fd->stream.lineterm = LINETERM_RAW;
|
||||
#if WITH_RESOLVE
|
||||
#if ( _WITH_IP4 || _WITH_IP6 ) && WITH_RESOLVE
|
||||
#if HAVE_RES_RETRANS
|
||||
fd->stream.para.socket.ip.res.retrans = -1;
|
||||
#endif
|
||||
#if HAVE_RES_RETRY
|
||||
fd->stream.para.socket.ip.res.retry = -1;
|
||||
#endif
|
||||
#endif /* WITH_RESOLVE */
|
||||
#endif /* ( _WITH_IP4 || _WITH_IP6 ) && WITH_RESOLVE */
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
@ -701,10 +701,10 @@ int xioopen_single(xiofile_t *xfd, int xioflags) {
|
|||
mode_t orig_umask, tmp_umask;
|
||||
int result;
|
||||
/* Values to be saved until xioopen() is finished */
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H
|
||||
#if ( _WITH_IP4 || _WITH_IP6 ) && WITH_RESOLVE && HAVE_RESOLV_H
|
||||
int do_res;
|
||||
struct __res_state save_res;
|
||||
#endif /* WITH_RESOLVE && HAVE_RESOLV_H */
|
||||
#endif
|
||||
#if WITH_NAMESPACES
|
||||
int save_netfd = -1;
|
||||
#endif
|
||||
|
@ -735,10 +735,10 @@ int xioopen_single(xiofile_t *xfd, int xioflags) {
|
|||
return -1;
|
||||
#endif /* WITH_NAMESPACES */
|
||||
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H
|
||||
#if ( _WITH_IP4 || _WITH_IP6 ) && WITH_RESOLVE && HAVE_RESOLV_H
|
||||
if ((do_res = xio_res_init(sfd, &save_res)) < 0)
|
||||
return STAT_NORETRY;
|
||||
#endif /* WITH_RESOLVE && HAVE_RESOLV_H */
|
||||
#endif
|
||||
|
||||
if (xio_chdir(sfd->opts, &orig_dir) < 0)
|
||||
return STAT_NORETRY;
|
||||
|
@ -769,10 +769,10 @@ int xioopen_single(xiofile_t *xfd, int xioflags) {
|
|||
free(orig_dir);
|
||||
}
|
||||
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H
|
||||
#if ( _WITH_IP4 || _WITH_IP6 ) && WITH_RESOLVE && HAVE_RESOLV_H
|
||||
if (do_res)
|
||||
xio_res_restore(&save_res);
|
||||
#endif /* WITH_RESOLVE && HAVE_RESOLV_H */
|
||||
#endif
|
||||
|
||||
#if WITH_NAMESPACES
|
||||
if (save_netfd > 0) {
|
||||
|
|
47
xioopts.c
47
xioopts.c
|
@ -177,7 +177,7 @@ static int applyopt(struct single *sfd, int fd, struct opt *opt);
|
|||
binary search! */
|
||||
/* NULL terminated */
|
||||
const struct optname optionnames[] = {
|
||||
#if HAVE_RESOLV_H && WITH_RES_AAONLY
|
||||
#if (WITH_IP4 || WITH_IP6) && HAVE_RESOLV_H && WITH_RES_AAONLY
|
||||
IF_RESOLVE("aaonly", &opt_res_aaonly)
|
||||
#endif
|
||||
#ifdef TCP_ABORT_THRESHOLD /* HP_UX */
|
||||
|
@ -421,7 +421,7 @@ const struct optname optionnames[] = {
|
|||
#ifdef TCP_DEFER_ACCEPT /* Linux 2.4.0 */
|
||||
IF_TCP ("defer-accept", &opt_tcp_defer_accept)
|
||||
#endif
|
||||
#if HAVE_RESOLV_H
|
||||
#if (WITH_IP4 || WITH_IP6) && HAVE_RESOLV_H
|
||||
IF_RESOLVE("defnames", &opt_res_defnames)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#ifdef O_DELAY
|
||||
|
@ -454,10 +454,10 @@ const struct optname optionnames[] = {
|
|||
#ifdef VDISCARD
|
||||
IF_TERMIOS("discard", &opt_vdiscard)
|
||||
#endif
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H && HAVE_RES_NSADDR_LIST
|
||||
#if (WITH_IP4 || WITH_IP6) && WITH_RESOLVE && HAVE_RESOLV_H && HAVE_RES_NSADDR_LIST
|
||||
IF_IP ("dns", &opt_res_nsaddr)
|
||||
#endif
|
||||
#if HAVE_RESOLV_H
|
||||
#if (WITH_IP4 || WITH_IP6) && HAVE_RESOLV_H
|
||||
IF_RESOLVE("dnsrch", &opt_res_dnsrch)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#ifdef SO_DONTLINGER
|
||||
|
@ -721,7 +721,7 @@ const struct optname optionnames[] = {
|
|||
IF_ANY ("ignoreeof", &opt_ignoreeof)
|
||||
IF_ANY ("ignoreof", &opt_ignoreeof)
|
||||
IF_TERMIOS("ignpar", &opt_ignpar)
|
||||
#if HAVE_RESOLV_H
|
||||
#if (WITH_IP4 || WITH_IP6) && HAVE_RESOLV_H
|
||||
IF_RESOLVE("igntc", &opt_res_igntc)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
IF_TERMIOS("imaxbel", &opt_imaxbel)
|
||||
|
@ -1050,7 +1050,7 @@ const struct optname optionnames[] = {
|
|||
IF_IP ("multicast-ttl", &opt_ip_multicast_ttl)
|
||||
IF_IP ("multicastloop", &opt_ip_multicast_loop)
|
||||
IF_IP ("multicastttl", &opt_ip_multicast_ttl)
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H && HAVE_RES_NSADDR_LIST
|
||||
#if (WITH_IP4 || WITH_IP6) && WITH_RESOLVE && HAVE_RESOLV_H && HAVE_RES_NSADDR_LIST
|
||||
IF_IP ("nameserver", &opt_res_nsaddr)
|
||||
#endif
|
||||
#if defined(O_NDELAY) && (!defined(O_NONBLOCK) || O_NDELAY != O_NONBLOCK)
|
||||
|
@ -1118,7 +1118,7 @@ const struct optname optionnames[] = {
|
|||
IF_OPENSSL("nosni", &opt_openssl_no_sni)
|
||||
#endif
|
||||
IF_INTERFACE("notrailers", &opt_iff_notrailers)
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H && HAVE_RES_NSADDR_LIST
|
||||
#if (WITH_IP4 || WITH_IP6) && WITH_RESOLVE && HAVE_RESOLV_H && HAVE_RES_NSADDR_LIST
|
||||
IF_IP ("nsaddr", &opt_res_nsaddr)
|
||||
#endif
|
||||
#ifdef O_NSHARE
|
||||
|
@ -1350,7 +1350,7 @@ const struct optname optionnames[] = {
|
|||
#if WITH_POSIXMQ
|
||||
IF_ANY ("posixmq-priority", &opt_posixmq_priority)
|
||||
#endif
|
||||
#if HAVE_RESOLV_H && WITH_RES_PRIMARY
|
||||
#if (WITH_IP4 || WITH_IP6) && HAVE_RESOLV_H && WITH_RES_PRIMARY
|
||||
IF_RESOLVE("primary", &opt_res_primary)
|
||||
#endif
|
||||
#ifdef SO_PRIORITY
|
||||
|
@ -1411,7 +1411,7 @@ const struct optname optionnames[] = {
|
|||
IF_OPEN ("rdonly", &opt_o_rdonly)
|
||||
IF_OPEN ("rdwr", &opt_o_rdwr)
|
||||
IF_ANY ("readbytes", &opt_readbytes)
|
||||
#if HAVE_RESOLV_H
|
||||
#if (WITH_IP4 || WITH_IP6) && HAVE_RESOLV_H
|
||||
IF_RESOLVE("recurse", &opt_res_recurse)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#ifdef IP_RECVDSTADDR
|
||||
|
@ -1451,7 +1451,7 @@ const struct optname optionnames[] = {
|
|||
#ifdef VREPRINT
|
||||
IF_TERMIOS("reprint", &opt_vreprint)
|
||||
#endif
|
||||
#if HAVE_RESOLV_H
|
||||
#if (WITH_IP4 || WITH_IP6) && HAVE_RESOLV_H
|
||||
# if WITH_AA_ONLY
|
||||
IF_RESOLVE("res-aaonly", &opt_res_aaonly)
|
||||
# endif
|
||||
|
@ -1480,15 +1480,15 @@ const struct optname optionnames[] = {
|
|||
# endif
|
||||
IF_RESOLVE("res-stayopen", &opt_res_stayopen)
|
||||
IF_RESOLVE("res-usevc", &opt_res_usevc)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#endif /* (WITH_IP4 || WITH_IP6) && HAVE_RESOLV_H */
|
||||
IF_PROXY ("resolv", &opt_proxy_resolve)
|
||||
IF_PROXY ("resolve", &opt_proxy_resolve)
|
||||
#ifdef IP_RETOPTS
|
||||
IF_IP ("retopts", &opt_ip_retopts)
|
||||
#endif
|
||||
# if HAVE_RES_RETRANS
|
||||
#if (WITH_IP4 || WITH_IP6) && HAVE_RES_RETRANS
|
||||
IF_RESOLVE("retrans", &opt_res_retrans)
|
||||
# endif
|
||||
#endif
|
||||
#if WITH_INTERFACE && defined(PACKET_AUXDATA)
|
||||
IF_SOCKET ("retrieve-vlan", &opt_retrieve_vlan)
|
||||
#endif
|
||||
|
@ -1724,7 +1724,7 @@ const struct optname optionnames[] = {
|
|||
IF_IPAPP ("sourceport", &opt_sourceport)
|
||||
IF_IPAPP ("sp", &opt_sourceport)
|
||||
IF_TERMIOS("start", &opt_vstart)
|
||||
#if HAVE_RESOLV_H
|
||||
#if (WITH_IP4 || WITH_IP6) && HAVE_RESOLV_H
|
||||
IF_RESOLVE("stayopen", &opt_res_stayopen)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
IF_EXEC ("stderr", &opt_stderr)
|
||||
|
@ -1930,7 +1930,7 @@ const struct optname optionnames[] = {
|
|||
IF_ANY ("user", &opt_user)
|
||||
IF_NAMED ("user-early", &opt_user_early)
|
||||
IF_ANY ("user-late", &opt_user_late)
|
||||
#if HAVE_RESOLV_H
|
||||
#if (WITH_IP4 || WITH_IP6) && HAVE_RESOLV_H
|
||||
IF_RESOLVE("usevc", &opt_res_usevc)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#if defined(AI_V4MAPPED)
|
||||
|
@ -2654,13 +2654,13 @@ int parseopts_table(const char **a, groups_t groups, struct opt **opts,
|
|||
(*opts)[i].value3.u_string);
|
||||
break;
|
||||
|
||||
#if defined(HAVE_STRUCT_IP_MREQ) || defined (HAVE_STRUCT_IP_MREQN)
|
||||
#if (WITH_IP4 || WITH_IP6) && ( defined(HAVE_STRUCT_IP_MREQ) || defined (HAVE_STRUCT_IP_MREQN) )
|
||||
case TYPE_IP_MREQN:
|
||||
xiotype_ip_add_membership(token, ent, opt);
|
||||
break;
|
||||
#endif /* defined(HAVE_STRUCT_IP_MREQ) || defined (HAVE_STRUCT_IP_MREQN) */
|
||||
#endif /* WITH_IP && defined(HAVE_STRUCT_IP_MREQ) || defined (HAVE_STRUCT_IP_MREQN) ) */
|
||||
|
||||
#if defined(HAVE_STRUCT_IP_MREQ_SOURCE) && defined(IP_ADD_SOURCE_MEMBERSHIP)
|
||||
#if _WITH_IP4 && defined(HAVE_STRUCT_IP_MREQ_SOURCE)
|
||||
case TYPE_IP_MREQ_SOURCE:
|
||||
xiotype_ip_add_source_membership(token, ent, opt);
|
||||
break;
|
||||
|
@ -3323,6 +3323,7 @@ int retropt_bind(struct opt *opts,
|
|||
}
|
||||
}
|
||||
|
||||
# if WITH_IP4 || WITH_IP6
|
||||
/* Set AI_PASSIVE, except when it is explicitely disabled */
|
||||
ai_flags2[0] = ai_flags[0];
|
||||
ai_flags2[1] = ai_flags[1];
|
||||
|
@ -3337,6 +3338,8 @@ int retropt_bind(struct opt *opts,
|
|||
Error("error resolving bind option");
|
||||
return STAT_NORETRY;
|
||||
}
|
||||
/*# else */
|
||||
# endif /* WITH_IP4 || WITH_IP6 */
|
||||
break;
|
||||
#endif /* WITH_IP4 || WITH_IP6 || WITH_VSOCK */
|
||||
|
||||
|
@ -3567,6 +3570,8 @@ int applyopt_ioctl_generic(
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if _WITH_SOCKET
|
||||
|
||||
int applyopt_sockopt(
|
||||
int fd,
|
||||
struct opt *opt)
|
||||
|
@ -3695,7 +3700,7 @@ int applyopt_sockopt(
|
|||
}
|
||||
break;
|
||||
#endif /* HAVE_STRUCT_LINGER */
|
||||
#if defined(HAVE_STRUCT_IP_MREQ) || defined (HAVE_STRUCT_IP_MREQN)
|
||||
#if (WITH_IP4 || WITH_IP6) && ( defined(HAVE_STRUCT_IP_MREQ) || defined (HAVE_STRUCT_IP_MREQN) )
|
||||
case TYPE_IP_MREQN:
|
||||
/* handled in applyopts_single */
|
||||
break;
|
||||
|
@ -3815,6 +3820,8 @@ int applyopt_sockopt_generic(
|
|||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _WITH_SOCKET */
|
||||
|
||||
int applyopt_flock(
|
||||
int fd,
|
||||
struct opt *opt)
|
||||
|
@ -4272,6 +4279,7 @@ static int applyopt_offset(struct single *sfd, struct opt *opt) {
|
|||
case TYPE_CONST:
|
||||
*(int *)ptr = opt->desc->minor;
|
||||
break;
|
||||
#if WITH_IP4
|
||||
case TYPE_IP4NAME:
|
||||
memset(ptr, 0, sizeof(struct sockaddr_in));
|
||||
((struct sockaddr_in *)ptr)->sin_addr = opt->value.u_ip4addr;
|
||||
|
@ -4281,6 +4289,7 @@ static int applyopt_offset(struct single *sfd, struct opt *opt) {
|
|||
memset(ptr, 0, sizeof(struct sockaddr_in));
|
||||
*(struct sockaddr_in *)ptr = opt->value.u_ip4sock;
|
||||
break;
|
||||
#endif /* WITH_IP4 */
|
||||
default:
|
||||
Error2("applyopt_offset(opt:%s): type %s not implemented",
|
||||
opt->desc->defname, xiohelp_opttypename(opt->desc->type));
|
||||
|
|
|
@ -72,7 +72,7 @@ enum e_types {
|
|||
#if HAVE_STRUCT_LINGER
|
||||
TYPE_LINGER, /* struct linger */
|
||||
#endif /* HAVE_STRUCT_LINGER */
|
||||
#if HAVE_STRUCT_IP_MREQ || HAVE_STRUCT_IP_MREQN
|
||||
#if (WITH_IP4 || WITH_IP6) && ( defined(HAVE_STRUCT_IP_MREQ) || defined(HAVE_STRUCT_IP_MREQN) )
|
||||
TYPE_IP_MREQN, /* for struct ip_mreq or struct ip_mreqn */
|
||||
#endif
|
||||
#if HAVE_STRUCT_IP_MREQ_SOURCE
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include "xio-openssl.h"
|
||||
|
||||
|
||||
static pid_t socat_kill_pid; /* here we pass the pid to be killed in sighandler */
|
||||
|
||||
static void signal_kill_pid(int dummy) {
|
||||
|
@ -51,6 +52,7 @@ int xioshutdown(xiofile_t *sock, int how) {
|
|||
sock->stream.fd, strerror(errno));
|
||||
}
|
||||
return 0;
|
||||
#if _WITH_SOCKET
|
||||
case XIOSHUT_DOWN:
|
||||
result = Shutdown(sock->stream.fd, how);
|
||||
if (result < 0) {
|
||||
|
@ -70,7 +72,6 @@ int xioshutdown(xiofile_t *sock, int how) {
|
|||
return -1;
|
||||
}
|
||||
return 0;
|
||||
#if _WITH_SOCKET
|
||||
case XIOSHUT_NULL:
|
||||
writenull = '\0'; /* assign something to make gcc happy */
|
||||
/* send an empty packet; only useful on datagram sockets? */
|
||||
|
|
|
@ -116,8 +116,10 @@ ssize_t xiowrite(xiofile_t *file, const void *buff, size_t bytes) {
|
|||
case XIOWRITE_PIPE:
|
||||
if (pipe->para.bipipe.socktype == SOCK_STREAM) {
|
||||
writt = Write(pipe->para.bipipe.fdout, buff, bytes);
|
||||
#if _WITH_SOCKET
|
||||
} else {
|
||||
writt = Send(pipe->para.bipipe.fdout, buff, bytes, 0);
|
||||
#endif /* _WITH_SOCKET */
|
||||
}
|
||||
_errno = errno;
|
||||
if (writt < 0) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue