remove/adjust obsolete C preprocessor cases
Mac OS Classic and Palm ae long since unsupported. TCP support implies sockets (since old Mac TCP is gone). For what it's worth, make the build work without TCP support, although no one ever builds that way.
This commit is contained in:
parent
58e8ed7d7d
commit
97da48ab67
|
@ -852,76 +852,6 @@
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/************ Macintosh with CodeWarrior (not OS X) *************/
|
|
||||||
|
|
||||||
#if ((defined(__MWERKS__) && !defined(__BEOS__) && !defined(__palmos__) && !defined(OS_X)) \
|
|
||||||
|| defined(MPW_C) || defined(MPW_CPLUS))
|
|
||||||
|
|
||||||
# if defined(__POWERPC__)
|
|
||||||
# define SCHEME_PLATFORM_LIBRARY_SUBPATH "ppc-mac"
|
|
||||||
# else
|
|
||||||
# define SCHEME_PLATFORM_LIBRARY_SUBPATH "68k-mac"
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# define SYSTEM_TYPE_NAME "macos"
|
|
||||||
# define MAC_FILE_SYSTEM
|
|
||||||
|
|
||||||
# define NO_READDIR
|
|
||||||
# define NO_READLINK
|
|
||||||
# define USE_MAC_FILE_TOOLBOX
|
|
||||||
|
|
||||||
# define MACINTOSH_EVENTS
|
|
||||||
# define MAC_MZ_GUI_ENABLED
|
|
||||||
# define MAC_CLASSIC_PROCESS_CONTROL
|
|
||||||
//# define NEVER_EVER_SLEEP
|
|
||||||
# define MACINTOSH_GIVE_TIME
|
|
||||||
# define MACINTOSH_SIOUX
|
|
||||||
|
|
||||||
# if !defined(__POWERPC__)
|
|
||||||
# define MACINTOSH_SET_STACK
|
|
||||||
# define COMPUTE_NEG_INEXACT_TO_EXACT_AS_POS
|
|
||||||
# define NAN_LT_COMPARISON_WRONG
|
|
||||||
# define SQRT_NAN_IS_WRONG
|
|
||||||
# define ATAN2_DOESNT_WORK_WITH_INFINITIES
|
|
||||||
# else
|
|
||||||
# define CODEFRAGMENT_DYNAMIC_LOAD
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifndef MZSCHEME_IS_CODEFRAGMENT
|
|
||||||
# define LINK_EXTENSIONS_BY_TABLE
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# define DO_STACK_CHECK
|
|
||||||
# define MACOS_FIND_STACK_BOUNDS
|
|
||||||
# define STACK_SAFETY_MARGIN 10000
|
|
||||||
|
|
||||||
# define TIME_SYNTAX
|
|
||||||
# define USE_MACTIME
|
|
||||||
# define DIR_FUNCTION
|
|
||||||
# define TIME_TYPE_IS_UNSIGNED
|
|
||||||
|
|
||||||
# define NO_SYS_INCLUDE_SUBDIR
|
|
||||||
# define NO_SLEEP
|
|
||||||
# define NO_USLEEP
|
|
||||||
# define NO_STAT_PROC
|
|
||||||
# define DONT_IGNORE_PIPE_SIGNAL
|
|
||||||
|
|
||||||
# define TRIG_ZERO_NEEDS_SIGN_CHECK
|
|
||||||
|
|
||||||
# define MACOS_UNICODE_SUPPORT
|
|
||||||
|
|
||||||
# define USE_MAC_TCP
|
|
||||||
|
|
||||||
# define SIGSET_IS_SIGNAL
|
|
||||||
|
|
||||||
# ifdef MPW_C
|
|
||||||
# define NO_INLINE_KEYWORD
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# define FLAGS_ALREADY_SET
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/************** DOS with Borland C++ ****************/
|
/************** DOS with Borland C++ ****************/
|
||||||
/* (Never successfully supported) */
|
/* (Never successfully supported) */
|
||||||
|
|
||||||
|
@ -960,41 +890,6 @@
|
||||||
|
|
||||||
# define FLAGS_ALREADY_SET
|
# define FLAGS_ALREADY_SET
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/************ PalmOS *************/
|
|
||||||
|
|
||||||
#if defined(__palmos__)
|
|
||||||
|
|
||||||
# define SCHEME_PLATFORM_LIBRARY_SUBPATH "68k-palm"
|
|
||||||
|
|
||||||
# define SYSTEM_TYPE_NAME "palm"
|
|
||||||
|
|
||||||
# define NO_FILE_SYSTEM_UTILS
|
|
||||||
# define NO_TCP_SUPPORT
|
|
||||||
# define MZSCHEME_SOMETHING_OMITTED
|
|
||||||
|
|
||||||
# define PALMOS_STUFF
|
|
||||||
# define NO_STAT_PROC
|
|
||||||
# define NO_USER_BREAK_HANDLER
|
|
||||||
# define NO_USLEEP
|
|
||||||
|
|
||||||
# define DO_STACK_CHECK
|
|
||||||
# define PALM_FIND_STACK_BOUNDS
|
|
||||||
# define STACK_SAFETY_MARGIN 1000
|
|
||||||
|
|
||||||
# define TIME_SYNTAX
|
|
||||||
# define USE_PALMTIME
|
|
||||||
# define USER_TIME_IS_CLOCK
|
|
||||||
# define TIME_TYPE_IS_UNSIGNED
|
|
||||||
|
|
||||||
# define DONT_IGNORE_PIPE_SIGNAL
|
|
||||||
# define DONT_IGNORE_FPE_SIGNAL
|
|
||||||
|
|
||||||
# define USE_PALM_INF_TESTS
|
|
||||||
|
|
||||||
# define FLAGS_ALREADY_SET
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/************ QNX *************/
|
/************ QNX *************/
|
||||||
|
|
|
@ -791,7 +791,7 @@ static void make_kernel_env(void)
|
||||||
|
|
||||||
DONE_TIME(env);
|
DONE_TIME(env);
|
||||||
|
|
||||||
register_network_evts();
|
scheme_register_network_evts();
|
||||||
|
|
||||||
REGISTER_SO(kernel_symbol);
|
REGISTER_SO(kernel_symbol);
|
||||||
kernel_symbol = scheme_intern_symbol("#%kernel");
|
kernel_symbol = scheme_intern_symbol("#%kernel");
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */
|
/* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */
|
||||||
|
|
||||||
|
#ifdef USE_TCP
|
||||||
static int mark_listener_SIZE(void *p, struct NewGC *gc) {
|
static int mark_listener_SIZE(void *p, struct NewGC *gc) {
|
||||||
listener_t *l = (listener_t *)p;
|
listener_t *l = (listener_t *)p;
|
||||||
|
|
||||||
|
@ -37,7 +38,6 @@ static int mark_listener_FIXUP(void *p, struct NewGC *gc) {
|
||||||
#define mark_listener_IS_CONST_SIZE 0
|
#define mark_listener_IS_CONST_SIZE 0
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_TCP
|
|
||||||
static int mark_tcp_SIZE(void *p, struct NewGC *gc) {
|
static int mark_tcp_SIZE(void *p, struct NewGC *gc) {
|
||||||
return
|
return
|
||||||
gcBYTES_TO_WORDS(sizeof(Scheme_Tcp));
|
gcBYTES_TO_WORDS(sizeof(Scheme_Tcp));
|
||||||
|
|
|
@ -1835,6 +1835,7 @@ END print;
|
||||||
|
|
||||||
START network;
|
START network;
|
||||||
|
|
||||||
|
#ifdef USE_TCP
|
||||||
mark_listener {
|
mark_listener {
|
||||||
listener_t *l = (listener_t *)p;
|
listener_t *l = (listener_t *)p;
|
||||||
|
|
||||||
|
@ -1849,7 +1850,6 @@ mark_listener {
|
||||||
gcBYTES_TO_WORDS(sizeof(listener_t) + ((l->count - mzFLEX_DELTA) * sizeof(tcp_t)));
|
gcBYTES_TO_WORDS(sizeof(listener_t) + ((l->count - mzFLEX_DELTA) * sizeof(tcp_t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_TCP
|
|
||||||
mark_tcp {
|
mark_tcp {
|
||||||
mark:
|
mark:
|
||||||
Scheme_Tcp *tcp = (Scheme_Tcp *)p;
|
Scheme_Tcp *tcp = (Scheme_Tcp *)p;
|
||||||
|
|
|
@ -126,7 +126,6 @@ static void closesocket(intptr_t s) {
|
||||||
typedef SOCKET tcp_t;
|
typedef SOCKET tcp_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Scheme_Object so;
|
Scheme_Object so;
|
||||||
Scheme_Custodian_Reference *mref;
|
Scheme_Custodian_Reference *mref;
|
||||||
|
@ -136,7 +135,6 @@ typedef struct {
|
||||||
# endif
|
# endif
|
||||||
tcp_t s[mzFLEX_ARRAY_DECL];
|
tcp_t s[mzFLEX_ARRAY_DECL];
|
||||||
} listener_t;
|
} listener_t;
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct Scheme_Tcp_Buf {
|
typedef struct Scheme_Tcp_Buf {
|
||||||
MZTAG_IF_REQUIRED
|
MZTAG_IF_REQUIRED
|
||||||
|
@ -316,6 +314,7 @@ void scheme_init_network(Scheme_Env *env)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_TCP
|
||||||
static int check_fd_sema(tcp_t s, int mode, Scheme_Schedule_Info *sinfo, Scheme_Object *orig)
|
static int check_fd_sema(tcp_t s, int mode, Scheme_Schedule_Info *sinfo, Scheme_Object *orig)
|
||||||
{
|
{
|
||||||
Scheme_Object *sema;
|
Scheme_Object *sema;
|
||||||
|
@ -332,6 +331,7 @@ static int check_fd_sema(tcp_t s, int mode, Scheme_Schedule_Info *sinfo, Scheme_
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
/* TCP glue */
|
/* TCP glue */
|
||||||
|
@ -346,12 +346,6 @@ static int check_fd_sema(tcp_t s, int mode, Scheme_Schedule_Info *sinfo, Scheme_
|
||||||
|
|
||||||
#ifdef USE_TCP
|
#ifdef USE_TCP
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
#define MAKE_TCP_ARG tcp_t tcp,
|
|
||||||
#else
|
|
||||||
#define MAKE_TCP_ARG
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define REGISTER_SOCKET(s) /**/
|
#define REGISTER_SOCKET(s) /**/
|
||||||
#define UNREGISTER_SOCKET(s) /**/
|
#define UNREGISTER_SOCKET(s) /**/
|
||||||
|
|
||||||
|
@ -773,8 +767,6 @@ void scheme_free_ghbn_data() {
|
||||||
void scheme_free_ghbn_data() { }
|
void scheme_free_ghbn_data() { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
|
|
||||||
struct mz_addrinfo *scheme_get_host_address(const char *address, int id, int *err,
|
struct mz_addrinfo *scheme_get_host_address(const char *address, int id, int *err,
|
||||||
int family, int passive, int tcp)
|
int family, int passive, int tcp)
|
||||||
{
|
{
|
||||||
|
@ -829,7 +821,6 @@ const char *scheme_host_address_strerror(int errnum)
|
||||||
{
|
{
|
||||||
return mz_gai_strerror(errnum);
|
return mz_gai_strerror(errnum);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/******************************* WinSock ***********************************/
|
/******************************* WinSock ***********************************/
|
||||||
|
|
||||||
|
@ -952,12 +943,7 @@ static void TCP_INIT(char *name)
|
||||||
/* TCP ports and listeners */
|
/* TCP ports and listeners */
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
#define LISTENER_WAS_CLOSED(x) (((listener_t *)(x))->s[0] == INVALID_SOCKET)
|
#define LISTENER_WAS_CLOSED(x) (((listener_t *)(x))->s[0] == INVALID_SOCKET)
|
||||||
#endif
|
|
||||||
#ifndef LISTENER_WAS_CLOSED
|
|
||||||
#define LISTENER_WAS_CLOSED(x) 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Forward declaration */
|
/* Forward declaration */
|
||||||
static int stop_listener(Scheme_Object *o);
|
static int stop_listener(Scheme_Object *o);
|
||||||
|
@ -980,7 +966,6 @@ static Scheme_Object *listener_to_evt(listener_t *listener)
|
||||||
|
|
||||||
static int tcp_check_accept(Scheme_Object *_listener, Scheme_Schedule_Info *sinfo)
|
static int tcp_check_accept(Scheme_Object *_listener, Scheme_Schedule_Info *sinfo)
|
||||||
{
|
{
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
listener_t *listener = (listener_t *)_listener;
|
listener_t *listener = (listener_t *)_listener;
|
||||||
int sr, i;
|
int sr, i;
|
||||||
# ifndef HAVE_POLL_SYSCALL
|
# ifndef HAVE_POLL_SYSCALL
|
||||||
|
@ -1063,14 +1048,11 @@ static int tcp_check_accept(Scheme_Object *_listener, Scheme_Schedule_Info *sinf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tcp_accept_needs_wakeup(Scheme_Object *_listener, void *fds)
|
static void tcp_accept_needs_wakeup(Scheme_Object *_listener, void *fds)
|
||||||
{
|
{
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
if (!LISTENER_WAS_CLOSED(_listener)) {
|
if (!LISTENER_WAS_CLOSED(_listener)) {
|
||||||
listener_t *listener = (listener_t *)_listener;
|
listener_t *listener = (listener_t *)_listener;
|
||||||
int i;
|
int i;
|
||||||
|
@ -1085,12 +1067,10 @@ static void tcp_accept_needs_wakeup(Scheme_Object *_listener, void *fds)
|
||||||
MZ_FD_SET(s, (fd_set *)fds2);
|
MZ_FD_SET(s, (fd_set *)fds2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcp_check_connect(Scheme_Object *connector_p, Scheme_Schedule_Info *sinfo)
|
static int tcp_check_connect(Scheme_Object *connector_p, Scheme_Schedule_Info *sinfo)
|
||||||
{
|
{
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
tcp_t s;
|
tcp_t s;
|
||||||
int sr;
|
int sr;
|
||||||
|
|
||||||
|
@ -1147,13 +1127,11 @@ static int tcp_check_connect(Scheme_Object *connector_p, Scheme_Schedule_Info *s
|
||||||
|
|
||||||
check_fd_sema(s, MZFD_CREATE_WRITE, sinfo, NULL);
|
check_fd_sema(s, MZFD_CREATE_WRITE, sinfo, NULL);
|
||||||
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tcp_connect_needs_wakeup(Scheme_Object *connector_p, void *fds)
|
static void tcp_connect_needs_wakeup(Scheme_Object *connector_p, void *fds)
|
||||||
{
|
{
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
void *fds1, *fds2;
|
void *fds1, *fds2;
|
||||||
tcp_t s = *(tcp_t *)connector_p;
|
tcp_t s = *(tcp_t *)connector_p;
|
||||||
|
|
||||||
|
@ -1162,7 +1140,6 @@ static void tcp_connect_needs_wakeup(Scheme_Object *connector_p, void *fds)
|
||||||
|
|
||||||
MZ_FD_SET(s, (fd_set *)fds1);
|
MZ_FD_SET(s, (fd_set *)fds1);
|
||||||
MZ_FD_SET(s, (fd_set *)fds2);
|
MZ_FD_SET(s, (fd_set *)fds2);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcp_check_write(Scheme_Object *port, Scheme_Schedule_Info *sinfo)
|
static int tcp_check_write(Scheme_Object *port, Scheme_Schedule_Info *sinfo)
|
||||||
|
@ -1177,7 +1154,6 @@ static int tcp_check_write(Scheme_Object *port, Scheme_Schedule_Info *sinfo)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
# ifdef HAVE_POLL_SYSCALL
|
# ifdef HAVE_POLL_SYSCALL
|
||||||
{
|
{
|
||||||
GC_CAN_IGNORE struct pollfd pfd[1];
|
GC_CAN_IGNORE struct pollfd pfd[1];
|
||||||
|
@ -1222,27 +1198,6 @@ static int tcp_check_write(Scheme_Object *port, Scheme_Schedule_Info *sinfo)
|
||||||
return sr;
|
return sr;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
#else
|
|
||||||
{
|
|
||||||
TCPiopbX *xpb;
|
|
||||||
TCPiopb *pb;
|
|
||||||
int bytes;
|
|
||||||
|
|
||||||
xpb = mac_make_xpb(data);
|
|
||||||
pb = (TCPiopb *)xpb;
|
|
||||||
|
|
||||||
pb->csCode = TCPStatus;
|
|
||||||
if (mzPBControlSync((ParamBlockRec*)pb))
|
|
||||||
bytes = -1;
|
|
||||||
else {
|
|
||||||
bytes = pb->csParam.status.sendWindow - pb->csParam.status.amtUnackedData;
|
|
||||||
if (bytes < 0)
|
|
||||||
bytes = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return !!bytes;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
check_fd_sema(data->tcp, MZFD_CREATE_WRITE, sinfo, port);
|
check_fd_sema(data->tcp, MZFD_CREATE_WRITE, sinfo, port);
|
||||||
|
|
||||||
|
@ -1251,7 +1206,6 @@ static int tcp_check_write(Scheme_Object *port, Scheme_Schedule_Info *sinfo)
|
||||||
|
|
||||||
static void tcp_write_needs_wakeup(Scheme_Object *port, void *fds)
|
static void tcp_write_needs_wakeup(Scheme_Object *port, void *fds)
|
||||||
{
|
{
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
Scheme_Object *conn = ((Scheme_Output_Port *)port)->port_data;
|
Scheme_Object *conn = ((Scheme_Output_Port *)port)->port_data;
|
||||||
void *fds1, *fds2;
|
void *fds1, *fds2;
|
||||||
tcp_t s = ((Scheme_Tcp *)conn)->tcp;
|
tcp_t s = ((Scheme_Tcp *)conn)->tcp;
|
||||||
|
@ -1261,11 +1215,10 @@ static void tcp_write_needs_wakeup(Scheme_Object *port, void *fds)
|
||||||
|
|
||||||
MZ_FD_SET(s, (fd_set *)fds1);
|
MZ_FD_SET(s, (fd_set *)fds1);
|
||||||
MZ_FD_SET(s, (fd_set *)fds2);
|
MZ_FD_SET(s, (fd_set *)fds2);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Scheme_Tcp *make_tcp_port_data(MAKE_TCP_ARG int refcount)
|
static Scheme_Tcp *make_tcp_port_data(tcp_t tcp, int refcount)
|
||||||
{
|
{
|
||||||
Scheme_Tcp *data;
|
Scheme_Tcp *data;
|
||||||
char *bfr;
|
char *bfr;
|
||||||
|
@ -1274,9 +1227,7 @@ static Scheme_Tcp *make_tcp_port_data(MAKE_TCP_ARG int refcount)
|
||||||
#ifdef MZTAG_REQUIRED
|
#ifdef MZTAG_REQUIRED
|
||||||
data->b.type = scheme_rt_tcp;
|
data->b.type = scheme_rt_tcp;
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
data->tcp = tcp;
|
data->tcp = tcp;
|
||||||
#endif
|
|
||||||
|
|
||||||
bfr = (char *)scheme_malloc_atomic(TCP_BUFFER_SIZE);
|
bfr = (char *)scheme_malloc_atomic(TCP_BUFFER_SIZE);
|
||||||
data->b.buffer = bfr;
|
data->b.buffer = bfr;
|
||||||
|
@ -1303,7 +1254,6 @@ static Scheme_Tcp *make_tcp_port_data(MAKE_TCP_ARG int refcount)
|
||||||
static int tcp_byte_ready (Scheme_Input_Port *port, Scheme_Schedule_Info *sinfo)
|
static int tcp_byte_ready (Scheme_Input_Port *port, Scheme_Schedule_Info *sinfo)
|
||||||
{
|
{
|
||||||
Scheme_Tcp *data;
|
Scheme_Tcp *data;
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
int sr;
|
int sr;
|
||||||
# ifndef HAVE_POLL_SYSCALL
|
# ifndef HAVE_POLL_SYSCALL
|
||||||
DECL_OS_FDSET(readfds);
|
DECL_OS_FDSET(readfds);
|
||||||
|
@ -1313,7 +1263,6 @@ static int tcp_byte_ready (Scheme_Input_Port *port, Scheme_Schedule_Info *sinfo)
|
||||||
INIT_DECL_OS_RD_FDSET(readfds);
|
INIT_DECL_OS_RD_FDSET(readfds);
|
||||||
INIT_DECL_OS_ER_FDSET(exfds);
|
INIT_DECL_OS_ER_FDSET(exfds);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
|
||||||
|
|
||||||
if (port->closed)
|
if (port->closed)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1330,7 +1279,6 @@ static int tcp_byte_ready (Scheme_Input_Port *port, Scheme_Schedule_Info *sinfo)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
# ifdef HAVE_POLL_SYSCALL
|
# ifdef HAVE_POLL_SYSCALL
|
||||||
{
|
{
|
||||||
GC_CAN_IGNORE struct pollfd pfd[1];
|
GC_CAN_IGNORE struct pollfd pfd[1];
|
||||||
|
@ -1359,7 +1307,6 @@ static int tcp_byte_ready (Scheme_Input_Port *port, Scheme_Schedule_Info *sinfo)
|
||||||
return sr;
|
return sr;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
#endif
|
|
||||||
|
|
||||||
check_fd_sema(data->tcp, MZFD_CREATE_READ, sinfo, (Scheme_Object *)port);
|
check_fd_sema(data->tcp, MZFD_CREATE_READ, sinfo, (Scheme_Object *)port);
|
||||||
|
|
||||||
|
@ -1402,7 +1349,6 @@ static intptr_t tcp_get_string(Scheme_Input_Port *port,
|
||||||
if (nonblock > 0)
|
if (nonblock > 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
{
|
{
|
||||||
Scheme_Object *sema;
|
Scheme_Object *sema;
|
||||||
sema = scheme_fd_to_semaphore(data->tcp, MZFD_CREATE_READ, 1);
|
sema = scheme_fd_to_semaphore(data->tcp, MZFD_CREATE_READ, 1);
|
||||||
|
@ -1415,14 +1361,6 @@ static intptr_t tcp_get_string(Scheme_Input_Port *port,
|
||||||
0.0, unless,
|
0.0, unless,
|
||||||
nonblock);
|
nonblock);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
do {
|
|
||||||
scheme_thread_block_enable_break((float)0.0, nonblock);
|
|
||||||
if (scheme_unless_ready(unless))
|
|
||||||
break;
|
|
||||||
} while (!tcp_byte_ready(port));
|
|
||||||
scheme_current_thread->ran_some = 1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
scheme_wait_input_allowed(port, nonblock);
|
scheme_wait_input_allowed(port, nonblock);
|
||||||
|
|
||||||
|
@ -1444,7 +1382,6 @@ static intptr_t tcp_get_string(Scheme_Input_Port *port,
|
||||||
else
|
else
|
||||||
read_amt = size;
|
read_amt = size;
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
{
|
{
|
||||||
int rn;
|
int rn;
|
||||||
do {
|
do {
|
||||||
|
@ -1461,8 +1398,6 @@ static intptr_t tcp_get_string(Scheme_Input_Port *port,
|
||||||
if ((data->b.bufmax == -1) && WAS_EAGAIN(errid))
|
if ((data->b.bufmax == -1) && WAS_EAGAIN(errid))
|
||||||
goto top;
|
goto top;
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (data->b.bufmax == -1) {
|
if (data->b.bufmax == -1) {
|
||||||
scheme_raise_exn(MZEXN_FAIL_NETWORK,
|
scheme_raise_exn(MZEXN_FAIL_NETWORK,
|
||||||
"tcp-read: error reading\n"
|
"tcp-read: error reading\n"
|
||||||
|
@ -1492,7 +1427,6 @@ static void tcp_need_wakeup(Scheme_Input_Port *port, void *fds)
|
||||||
|
|
||||||
data = (Scheme_Tcp *)port->port_data;
|
data = (Scheme_Tcp *)port->port_data;
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
{
|
{
|
||||||
void *fds2;
|
void *fds2;
|
||||||
|
|
||||||
|
@ -1501,7 +1435,6 @@ static void tcp_need_wakeup(Scheme_Input_Port *port, void *fds)
|
||||||
MZ_FD_SET(data->tcp, (fd_set *)fds);
|
MZ_FD_SET(data->tcp, (fd_set *)fds);
|
||||||
MZ_FD_SET(data->tcp, (fd_set *)fds2);
|
MZ_FD_SET(data->tcp, (fd_set *)fds2);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tcp_close_input(Scheme_Input_Port *port)
|
static void tcp_close_input(Scheme_Input_Port *port)
|
||||||
|
@ -1510,22 +1443,18 @@ static void tcp_close_input(Scheme_Input_Port *port)
|
||||||
|
|
||||||
data = (Scheme_Tcp *)port->port_data;
|
data = (Scheme_Tcp *)port->port_data;
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
if (!(data->flags & MZ_TCP_ABANDON_INPUT)) {
|
if (!(data->flags & MZ_TCP_ABANDON_INPUT)) {
|
||||||
int cr;
|
int cr;
|
||||||
do {
|
do {
|
||||||
cr = shutdown(data->tcp, 0);
|
cr = shutdown(data->tcp, 0);
|
||||||
} while ((cr == -1) && (errno == EINTR));
|
} while ((cr == -1) && (errno == EINTR));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (--data->b.refcount)
|
if (--data->b.refcount)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
UNREGISTER_SOCKET(data->tcp);
|
UNREGISTER_SOCKET(data->tcp);
|
||||||
closesocket(data->tcp);
|
closesocket(data->tcp);
|
||||||
#endif
|
|
||||||
|
|
||||||
(void)scheme_fd_to_semaphore(data->tcp, MZFD_REMOVE, 1);
|
(void)scheme_fd_to_semaphore(data->tcp, MZFD_REMOVE, 1);
|
||||||
}
|
}
|
||||||
|
@ -1563,7 +1492,6 @@ static intptr_t tcp_do_write_string(Scheme_Output_Port *port,
|
||||||
|
|
||||||
top:
|
top:
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
do {
|
do {
|
||||||
sent = send(data->tcp, s XFORM_OK_PLUS offset, len, 0);
|
sent = send(data->tcp, s XFORM_OK_PLUS offset, len, 0);
|
||||||
} while ((sent == -1) && (NOT_WINSOCK(errno) == EINTR));
|
} while ((sent == -1) && (NOT_WINSOCK(errno) == EINTR));
|
||||||
|
@ -1600,7 +1528,6 @@ static intptr_t tcp_do_write_string(Scheme_Output_Port *port,
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
errid = 0;
|
errid = 0;
|
||||||
#endif
|
|
||||||
|
|
||||||
if (would_block) {
|
if (would_block) {
|
||||||
if (rarely_block == 2)
|
if (rarely_block == 2)
|
||||||
|
@ -1719,22 +1646,18 @@ static void tcp_close_output(Scheme_Output_Port *port)
|
||||||
if (data->b.out_bufmax && !scheme_force_port_closed)
|
if (data->b.out_bufmax && !scheme_force_port_closed)
|
||||||
tcp_flush(port, 0, 0);
|
tcp_flush(port, 0, 0);
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
if (!(data->flags & MZ_TCP_ABANDON_OUTPUT)) {
|
if (!(data->flags & MZ_TCP_ABANDON_OUTPUT)) {
|
||||||
int cr;
|
int cr;
|
||||||
do {
|
do {
|
||||||
cr = shutdown(data->tcp, 1);
|
cr = shutdown(data->tcp, 1);
|
||||||
} while ((cr == -1) && (errno == EINTR));
|
} while ((cr == -1) && (errno == EINTR));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (--data->b.refcount)
|
if (--data->b.refcount)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
UNREGISTER_SOCKET(data->tcp);
|
UNREGISTER_SOCKET(data->tcp);
|
||||||
closesocket(data->tcp);
|
closesocket(data->tcp);
|
||||||
#endif
|
|
||||||
|
|
||||||
(void)scheme_fd_to_semaphore(data->tcp, MZFD_REMOVE, 1);
|
(void)scheme_fd_to_semaphore(data->tcp, MZFD_REMOVE, 1);
|
||||||
}
|
}
|
||||||
|
@ -1819,13 +1742,17 @@ make_tcp_output_port(void *data, const char *name, Scheme_Object *cust)
|
||||||
return make_tcp_output_port_symbol_name(data, scheme_intern_symbol(name), cust);
|
return make_tcp_output_port_symbol_name(data, scheme_intern_symbol(name), cust);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void scheme_free_ghbn_data() { }
|
||||||
|
|
||||||
#endif /* USE_TCP */
|
#endif /* USE_TCP */
|
||||||
|
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
/* TCP Racket interface */
|
/* TCP Racket interface */
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
#ifdef USE_TCP
|
||||||
typedef struct Close_Socket_Data {
|
typedef struct Close_Socket_Data {
|
||||||
tcp_t s;
|
tcp_t s;
|
||||||
struct mz_addrinfo *src_addr, *dest_addr;
|
struct mz_addrinfo *src_addr, *dest_addr;
|
||||||
|
@ -1843,7 +1770,7 @@ static void closesocket_w_decrement(Close_Socket_Data *csd)
|
||||||
|
|
||||||
const char *scheme_hostname_error(int err)
|
const char *scheme_hostname_error(int err)
|
||||||
{
|
{
|
||||||
#ifdef USE_SOCKETS_TCP
|
#ifdef USE_TCP
|
||||||
return mz_gai_strerror(err);
|
return mz_gai_strerror(err);
|
||||||
#else
|
#else
|
||||||
return "?";
|
return "?";
|
||||||
|
@ -1857,7 +1784,7 @@ static Scheme_Object *tcp_connect(int argc, Scheme_Object *argv[])
|
||||||
int errpart = 0, errid = 0;
|
int errpart = 0, errid = 0;
|
||||||
volatile int nameerr = 0, no_local_spec;
|
volatile int nameerr = 0, no_local_spec;
|
||||||
Scheme_Object *bs, *src_bs;
|
Scheme_Object *bs, *src_bs;
|
||||||
#ifdef USE_SOCKETS_TCP
|
#ifdef USE_TCP
|
||||||
GC_CAN_IGNORE struct mz_addrinfo *tcp_connect_dest;
|
GC_CAN_IGNORE struct mz_addrinfo *tcp_connect_dest;
|
||||||
GC_CAN_IGNORE struct mz_addrinfo * volatile tcp_connect_src;
|
GC_CAN_IGNORE struct mz_addrinfo * volatile tcp_connect_src;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1910,9 +1837,7 @@ static Scheme_Object *tcp_connect(int argc, Scheme_Object *argv[])
|
||||||
#ifdef USE_TCP
|
#ifdef USE_TCP
|
||||||
id = origid;
|
id = origid;
|
||||||
src_id = src_origid;
|
src_id = src_origid;
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
tcp_connect_dest = scheme_get_host_address(address, id, &errid, -1, 0, 1);
|
tcp_connect_dest = scheme_get_host_address(address, id, &errid, -1, 0, 1);
|
||||||
if (tcp_connect_dest) {
|
if (tcp_connect_dest) {
|
||||||
if (no_local_spec)
|
if (no_local_spec)
|
||||||
|
@ -2049,9 +1974,7 @@ static Scheme_Object *tcp_connect(int argc, Scheme_Object *argv[])
|
||||||
nameerr = 1;
|
nameerr = 1;
|
||||||
errmsg = "host not found";
|
errmsg = "host not found";
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_TCP
|
|
||||||
scheme_raise_exn(MZEXN_FAIL_NETWORK,
|
scheme_raise_exn(MZEXN_FAIL_NETWORK,
|
||||||
"tcp-connect: connection failed\n"
|
"tcp-connect: connection failed\n"
|
||||||
"%s%s%s"
|
"%s%s%s"
|
||||||
|
@ -2078,7 +2001,7 @@ tcp_connect_break(int argc, Scheme_Object *argv[])
|
||||||
return scheme_call_enable_break(tcp_connect, argc, argv);
|
return scheme_call_enable_break(tcp_connect, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_TCP
|
||||||
static unsigned short get_no_portno(tcp_t socket, int *_errid)
|
static unsigned short get_no_portno(tcp_t socket, int *_errid)
|
||||||
{
|
{
|
||||||
char here[MZ_SOCK_NAME_MAX_LEN];
|
char here[MZ_SOCK_NAME_MAX_LEN];
|
||||||
|
@ -2101,6 +2024,7 @@ static unsigned short get_no_portno(tcp_t socket, int *_errid)
|
||||||
*_errid = 0;
|
*_errid = 0;
|
||||||
return no_port;
|
return no_port;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static Scheme_Object *
|
static Scheme_Object *
|
||||||
tcp_listen(int argc, Scheme_Object *argv[])
|
tcp_listen(int argc, Scheme_Object *argv[])
|
||||||
|
@ -2157,6 +2081,7 @@ tcp_listen(int argc, Scheme_Object *argv[])
|
||||||
retry:
|
retry:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_TCP
|
||||||
{
|
{
|
||||||
GC_CAN_IGNORE struct mz_addrinfo *tcp_listen_addr, *addr;
|
GC_CAN_IGNORE struct mz_addrinfo *tcp_listen_addr, *addr;
|
||||||
int err, count = 0, pos = 0, i;
|
int err, count = 0, pos = 0, i;
|
||||||
|
@ -2356,7 +2281,6 @@ tcp_listen(int argc, Scheme_Object *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_TCP
|
|
||||||
scheme_raise_exn(MZEXN_FAIL_NETWORK,
|
scheme_raise_exn(MZEXN_FAIL_NETWORK,
|
||||||
"tcp-listen: listen failed\n"
|
"tcp-listen: listen failed\n"
|
||||||
" port number: %d\n"
|
" port number: %d\n"
|
||||||
|
@ -2375,7 +2299,6 @@ static int stop_listener(Scheme_Object *o)
|
||||||
{
|
{
|
||||||
int was_closed = 0;
|
int was_closed = 0;
|
||||||
|
|
||||||
#ifdef USE_SOCKETS_TCP
|
|
||||||
{
|
{
|
||||||
listener_t *listener = (listener_t *)o;
|
listener_t *listener = (listener_t *)o;
|
||||||
int i;
|
int i;
|
||||||
|
@ -2394,7 +2317,6 @@ static int stop_listener(Scheme_Object *o)
|
||||||
scheme_remove_managed(((listener_t *)o)->mref, o);
|
scheme_remove_managed(((listener_t *)o)->mref, o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return was_closed;
|
return was_closed;
|
||||||
}
|
}
|
||||||
|
@ -2459,11 +2381,9 @@ do_tcp_accept(int argc, Scheme_Object *argv[], Scheme_Object *cust, char **_fail
|
||||||
#ifdef USE_TCP
|
#ifdef USE_TCP
|
||||||
int was_closed = 0, errid, ready_pos;
|
int was_closed = 0, errid, ready_pos;
|
||||||
Scheme_Object *listener;
|
Scheme_Object *listener;
|
||||||
# ifdef USE_SOCKETS_TCP
|
|
||||||
tcp_t s, ls;
|
tcp_t s, ls;
|
||||||
unsigned int l;
|
unsigned int l;
|
||||||
GC_CAN_IGNORE char tcp_accept_addr[MZ_SOCK_NAME_MAX_LEN];
|
GC_CAN_IGNORE char tcp_accept_addr[MZ_SOCK_NAME_MAX_LEN];
|
||||||
# endif
|
|
||||||
|
|
||||||
if (!SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_listener_type))
|
if (!SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_listener_type))
|
||||||
scheme_wrong_contract("tcp-accept", "tcp-listener?", 0, argc, argv);
|
scheme_wrong_contract("tcp-accept", "tcp-listener?", 0, argc, argv);
|
||||||
|
@ -2510,7 +2430,6 @@ do_tcp_accept(int argc, Scheme_Object *argv[], Scheme_Object *cust, char **_fail
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ifdef USE_SOCKETS_TCP
|
|
||||||
ls = ((listener_t *)listener)->s[ready_pos-1];
|
ls = ((listener_t *)listener)->s[ready_pos-1];
|
||||||
|
|
||||||
l = sizeof(tcp_accept_addr);
|
l = sizeof(tcp_accept_addr);
|
||||||
|
@ -2540,7 +2459,6 @@ do_tcp_accept(int argc, Scheme_Object *argv[], Scheme_Object *cust, char **_fail
|
||||||
return scheme_values(2, v);
|
return scheme_values(2, v);
|
||||||
}
|
}
|
||||||
errid = SOCK_ERRNO();
|
errid = SOCK_ERRNO();
|
||||||
# endif
|
|
||||||
|
|
||||||
if (_fail_reason)
|
if (_fail_reason)
|
||||||
*_fail_reason = "tcp-accept-evt: accept from listener failed";
|
*_fail_reason = "tcp-accept-evt: accept from listener failed";
|
||||||
|
@ -2568,7 +2486,7 @@ tcp_accept_break(int argc, Scheme_Object *argv[])
|
||||||
return scheme_call_enable_break(tcp_accept, argc, argv);
|
return scheme_call_enable_break(tcp_accept, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
void register_network_evts()
|
void scheme_register_network_evts()
|
||||||
{
|
{
|
||||||
#ifdef USE_TCP
|
#ifdef USE_TCP
|
||||||
scheme_add_evt(scheme_listener_type, (Scheme_Ready_Fun)tcp_check_accept, tcp_accept_needs_wakeup, NULL, 0);
|
scheme_add_evt(scheme_listener_type, (Scheme_Ready_Fun)tcp_check_accept, tcp_accept_needs_wakeup, NULL, 0);
|
||||||
|
@ -2590,10 +2508,11 @@ void scheme_getnameinfo(void *sa, int salen,
|
||||||
char *host, int hostlen,
|
char *host, int hostlen,
|
||||||
char *serv, int servlen)
|
char *serv, int servlen)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_GETADDRINFO
|
#ifdef USE_TCP
|
||||||
|
# ifdef HAVE_GETADDRINFO
|
||||||
getnameinfo(sa, salen, host, hostlen, serv, servlen,
|
getnameinfo(sa, salen, host, hostlen, serv, servlen,
|
||||||
NI_NUMERICHOST | NI_NUMERICSERV);
|
NI_NUMERICHOST | NI_NUMERICSERV);
|
||||||
#else
|
# else
|
||||||
if (host) {
|
if (host) {
|
||||||
unsigned char *b;
|
unsigned char *b;
|
||||||
b = (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr;
|
b = (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr;
|
||||||
|
@ -2604,6 +2523,9 @@ void scheme_getnameinfo(void *sa, int salen,
|
||||||
id = ntohs(((struct sockaddr_in *)sa)->sin_port);
|
id = ntohs(((struct sockaddr_in *)sa)->sin_port);
|
||||||
sprintf(serv, "%d", id);
|
sprintf(serv, "%d", id);
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
scheme_signal_error("getnameinfo unsupported");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2666,7 +2588,6 @@ static Scheme_Object *tcp_addresses(int argc, Scheme_Object *argv[])
|
||||||
scheme_raise_exn(MZEXN_FAIL_NETWORK,
|
scheme_raise_exn(MZEXN_FAIL_NETWORK,
|
||||||
"tcp-addresses: port is closed");
|
"tcp-addresses: port is closed");
|
||||||
|
|
||||||
# ifdef USE_SOCKETS_TCP
|
|
||||||
{
|
{
|
||||||
unsigned int l;
|
unsigned int l;
|
||||||
char here[MZ_SOCK_NAME_MAX_LEN], there[MZ_SOCK_NAME_MAX_LEN];
|
char here[MZ_SOCK_NAME_MAX_LEN], there[MZ_SOCK_NAME_MAX_LEN];
|
||||||
|
@ -2723,16 +2644,6 @@ static Scheme_Object *tcp_addresses(int argc, Scheme_Object *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# else
|
|
||||||
result[0] = scheme_make_utf8_string("0.0.0.0");
|
|
||||||
if (with_ports) {
|
|
||||||
result[1] = scheme_make_integer(1);
|
|
||||||
result[2] = result[0];
|
|
||||||
result[3] = result[1];
|
|
||||||
} else {
|
|
||||||
result[1] = result[0];
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
return scheme_values(with_ports ? 4 : 2, result);
|
return scheme_values(with_ports ? 4 : 2, result);
|
||||||
#else
|
#else
|
||||||
|
@ -2889,6 +2800,7 @@ int scheme_get_port_socket(Scheme_Object *p, intptr_t *_s)
|
||||||
void scheme_socket_to_ports(intptr_t s, const char *name, int takeover,
|
void scheme_socket_to_ports(intptr_t s, const char *name, int takeover,
|
||||||
Scheme_Object **_inp, Scheme_Object **_outp)
|
Scheme_Object **_inp, Scheme_Object **_outp)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_TCP
|
||||||
Scheme_Tcp *tcp;
|
Scheme_Tcp *tcp;
|
||||||
Scheme_Object *v;
|
Scheme_Object *v;
|
||||||
|
|
||||||
|
@ -2902,11 +2814,16 @@ void scheme_socket_to_ports(intptr_t s, const char *name, int takeover,
|
||||||
if (takeover) {
|
if (takeover) {
|
||||||
REGISTER_SOCKET(s);
|
REGISTER_SOCKET(s);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
*_inp = NULL;
|
||||||
|
*_outp = NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void scheme_socket_to_input_port(intptr_t s, Scheme_Object *name, int takeover,
|
void scheme_socket_to_input_port(intptr_t s, Scheme_Object *name, int takeover,
|
||||||
Scheme_Object **_inp)
|
Scheme_Object **_inp)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_TCP
|
||||||
Scheme_Tcp *tcp;
|
Scheme_Tcp *tcp;
|
||||||
Scheme_Object *v;
|
Scheme_Object *v;
|
||||||
|
|
||||||
|
@ -2918,11 +2835,15 @@ void scheme_socket_to_input_port(intptr_t s, Scheme_Object *name, int takeover,
|
||||||
if (takeover) {
|
if (takeover) {
|
||||||
REGISTER_SOCKET(s);
|
REGISTER_SOCKET(s);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
*_inp = NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void scheme_socket_to_output_port(intptr_t s, Scheme_Object *name, int takeover,
|
void scheme_socket_to_output_port(intptr_t s, Scheme_Object *name, int takeover,
|
||||||
Scheme_Object **_outp)
|
Scheme_Object **_outp)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_TCP
|
||||||
Scheme_Tcp *tcp;
|
Scheme_Tcp *tcp;
|
||||||
Scheme_Object *v;
|
Scheme_Object *v;
|
||||||
|
|
||||||
|
@ -2934,10 +2855,13 @@ void scheme_socket_to_output_port(intptr_t s, Scheme_Object *name, int takeover,
|
||||||
if (takeover) {
|
if (takeover) {
|
||||||
REGISTER_SOCKET(s);
|
REGISTER_SOCKET(s);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
*_outp = NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
intptr_t scheme_dup_socket(intptr_t fd) {
|
intptr_t scheme_dup_socket(intptr_t fd) {
|
||||||
#ifdef USE_SOCKETS_TCP
|
#ifdef USE_TCP
|
||||||
# ifdef USE_WINSOCK_TCP
|
# ifdef USE_WINSOCK_TCP
|
||||||
intptr_t nsocket;
|
intptr_t nsocket;
|
||||||
intptr_t rc;
|
intptr_t rc;
|
||||||
|
@ -2962,7 +2886,7 @@ intptr_t scheme_dup_socket(intptr_t fd) {
|
||||||
|
|
||||||
void scheme_close_socket_fd(intptr_t fd)
|
void scheme_close_socket_fd(intptr_t fd)
|
||||||
{
|
{
|
||||||
#ifdef USE_SOCKETS_TCP
|
#ifdef USE_TCP
|
||||||
UNREGISTER_SOCKET(fd);
|
UNREGISTER_SOCKET(fd);
|
||||||
closesocket(fd);
|
closesocket(fd);
|
||||||
(void)scheme_fd_to_semaphore(fd, MZFD_REMOVE, 1);
|
(void)scheme_fd_to_semaphore(fd, MZFD_REMOVE, 1);
|
||||||
|
@ -3004,6 +2928,11 @@ static int udp_close_it(Scheme_Object *_udp)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
typedef struct Scheme_UDP_Evt { } Scheme_UDP_Evt;
|
||||||
|
typedef Scheme_Object Scheme_UDP;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static Scheme_Object *make_udp(int argc, Scheme_Object *argv[])
|
static Scheme_Object *make_udp(int argc, Scheme_Object *argv[])
|
||||||
|
@ -3425,6 +3354,7 @@ static void udp_send_needs_wakeup(Scheme_Object *_udp, void *fds)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef UDP_IS_SUPPORTED
|
||||||
static Scheme_Object *do_udp_send_it(const char *name, Scheme_UDP *udp,
|
static Scheme_Object *do_udp_send_it(const char *name, Scheme_UDP *udp,
|
||||||
char *bstr, intptr_t start, intptr_t end,
|
char *bstr, intptr_t start, intptr_t end,
|
||||||
char *dest_addr, int dest_addr_len, int can_block)
|
char *dest_addr, int dest_addr_len, int can_block)
|
||||||
|
@ -3501,6 +3431,7 @@ static Scheme_Object *do_udp_send_it(const char *name, Scheme_UDP *udp,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static Scheme_Object *udp_send_it(const char *name, int argc, Scheme_Object *argv[],
|
static Scheme_Object *udp_send_it(const char *name, int argc, Scheme_Object *argv[],
|
||||||
int with_addr, int can_block, Scheme_UDP_Evt *fill_evt)
|
int with_addr, int can_block, Scheme_UDP_Evt *fill_evt)
|
||||||
|
@ -3821,6 +3752,7 @@ static Scheme_Object *udp_recv(const char *name, int argc, Scheme_Object *argv[]
|
||||||
if (!SCHEME_BYTE_STRINGP(argv[1]) || !SCHEME_MUTABLEP(argv[1]))
|
if (!SCHEME_BYTE_STRINGP(argv[1]) || !SCHEME_MUTABLEP(argv[1]))
|
||||||
scheme_wrong_contract(name, "(or/c bytes? (not/c immutable?))", 1, argc, argv);
|
scheme_wrong_contract(name, "(or/c bytes? (not/c immutable?))", 1, argc, argv);
|
||||||
|
|
||||||
|
#ifdef UDP_IS_SUPPORTED
|
||||||
scheme_get_substring_indices(name, argv[1],
|
scheme_get_substring_indices(name, argv[1],
|
||||||
argc, argv,
|
argc, argv,
|
||||||
2, 3, &start, &end);
|
2, 3, &start, &end);
|
||||||
|
@ -3834,6 +3766,9 @@ static Scheme_Object *udp_recv(const char *name, int argc, Scheme_Object *argv[]
|
||||||
|
|
||||||
return scheme_values(3,v);
|
return scheme_values(3,v);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static Scheme_Object *udp_receive(int argc, Scheme_Object *argv[])
|
static Scheme_Object *udp_receive(int argc, Scheme_Object *argv[])
|
||||||
|
@ -3903,7 +3838,9 @@ static Scheme_Object *udp_write_to_evt(int argc, Scheme_Object *argv[])
|
||||||
Scheme_Object *evt;
|
Scheme_Object *evt;
|
||||||
evt = make_udp_evt("udp-send-to-evt", argc, argv, 0);
|
evt = make_udp_evt("udp-send-to-evt", argc, argv, 0);
|
||||||
udp_send_it("udp-send-to-evt", argc, argv, 1, 0, (Scheme_UDP_Evt *)evt);
|
udp_send_it("udp-send-to-evt", argc, argv, 1, 0, (Scheme_UDP_Evt *)evt);
|
||||||
|
#ifdef UDP_IS_SUPPORTED
|
||||||
((Scheme_UDP_Evt *)evt)->with_addr = 1;
|
((Scheme_UDP_Evt *)evt)->with_addr = 1;
|
||||||
|
#endif
|
||||||
return evt;
|
return evt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4282,11 +4219,17 @@ udp_multicast_join_or_leave_group(char const *name, int optname, int argc, Schem
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef UDP_IS_SUPPORTED
|
||||||
|
# define WHEN_UDP_IS_SUPPORTED(x) x
|
||||||
|
#else
|
||||||
|
# define WHEN_UDP_IS_SUPPORTED(x) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
static Scheme_Object *
|
static Scheme_Object *
|
||||||
udp_multicast_join_group(int argc, Scheme_Object *argv[])
|
udp_multicast_join_group(int argc, Scheme_Object *argv[])
|
||||||
{
|
{
|
||||||
return udp_multicast_join_or_leave_group("udp-multicast-join-group!",
|
return udp_multicast_join_or_leave_group("udp-multicast-join-group!",
|
||||||
IP_ADD_MEMBERSHIP,
|
WHEN_UDP_IS_SUPPORTED(IP_ADD_MEMBERSHIP),
|
||||||
argc,
|
argc,
|
||||||
argv);
|
argv);
|
||||||
}
|
}
|
||||||
|
@ -4295,7 +4238,7 @@ static Scheme_Object *
|
||||||
udp_multicast_leave_group(int argc, Scheme_Object *argv[])
|
udp_multicast_leave_group(int argc, Scheme_Object *argv[])
|
||||||
{
|
{
|
||||||
return udp_multicast_join_or_leave_group("udp-multicast-leave-group!",
|
return udp_multicast_join_or_leave_group("udp-multicast-leave-group!",
|
||||||
IP_DROP_MEMBERSHIP,
|
WHEN_UDP_IS_SUPPORTED(IP_DROP_MEMBERSHIP),
|
||||||
argc,
|
argc,
|
||||||
argv);
|
argv);
|
||||||
}
|
}
|
||||||
|
@ -4313,13 +4256,13 @@ START_XFORM_SKIP;
|
||||||
static void register_traversers(void)
|
static void register_traversers(void)
|
||||||
{
|
{
|
||||||
#ifdef USE_TCP
|
#ifdef USE_TCP
|
||||||
|
GC_REG_TRAV(scheme_listener_type, mark_listener);
|
||||||
GC_REG_TRAV(scheme_rt_tcp, mark_tcp);
|
GC_REG_TRAV(scheme_rt_tcp, mark_tcp);
|
||||||
# ifdef UDP_IS_SUPPORTED
|
# ifdef UDP_IS_SUPPORTED
|
||||||
GC_REG_TRAV(scheme_udp_type, mark_udp);
|
GC_REG_TRAV(scheme_udp_type, mark_udp);
|
||||||
GC_REG_TRAV(scheme_udp_evt_type, mark_udp_evt);
|
GC_REG_TRAV(scheme_udp_evt_type, mark_udp_evt);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
GC_REG_TRAV(scheme_listener_type, mark_listener);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
END_XFORM_SKIP;
|
END_XFORM_SKIP;
|
||||||
|
|
|
@ -1558,6 +1558,7 @@ static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *h
|
||||||
{
|
{
|
||||||
intptr_t fd;
|
intptr_t fd;
|
||||||
if (scheme_get_port_socket(so, &fd)) {
|
if (scheme_get_port_socket(so, &fd)) {
|
||||||
|
#ifdef USE_TCP
|
||||||
if (mode == mzPDC_COPY) {
|
if (mode == mzPDC_COPY) {
|
||||||
Scheme_Object *tmp;
|
Scheme_Object *tmp;
|
||||||
Scheme_Object *portname;
|
Scheme_Object *portname;
|
||||||
|
@ -1585,6 +1586,9 @@ static Scheme_Object *shallow_types_copy(Scheme_Object *so, Scheme_Hash_Table *h
|
||||||
ssfd->name = tmp;
|
ssfd->name = tmp;
|
||||||
return (Scheme_Object *)ssfd;
|
return (Scheme_Object *)ssfd;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
scheme_signal_error("sockets aren't supported");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if (SCHEME_TRUEP(scheme_file_stream_port_p(1, &so))) {
|
else if (SCHEME_TRUEP(scheme_file_stream_port_p(1, &so))) {
|
||||||
if (scheme_get_port_file_descriptor(so, &fd)) {
|
if (scheme_get_port_file_descriptor(so, &fd)) {
|
||||||
|
|
|
@ -1127,7 +1127,7 @@ void scheme_fdzero(void *fd)
|
||||||
|
|
||||||
void *scheme_alloc_fdset_array(int count, int permanent)
|
void *scheme_alloc_fdset_array(int count, int permanent)
|
||||||
{
|
{
|
||||||
# if defined(FILES_HAVE_FDS) || defined(USE_SOCKETS_TCP) || defined(WIN32_FD_HANDLES)
|
# if defined(FILES_HAVE_FDS) || defined(USE_TCP) || defined(WIN32_FD_HANDLES)
|
||||||
void *fdarray;
|
void *fdarray;
|
||||||
# if defined(WIN32_FD_HANDLES)
|
# if defined(WIN32_FD_HANDLES)
|
||||||
if (count) {
|
if (count) {
|
||||||
|
@ -1188,7 +1188,7 @@ void *scheme_init_fdset_array(void *fdarray, int count)
|
||||||
|
|
||||||
void *scheme_get_fdset(void *fdarray, int pos)
|
void *scheme_get_fdset(void *fdarray, int pos)
|
||||||
{
|
{
|
||||||
# if defined(FILES_HAVE_FDS) || defined(USE_SOCKETS_TCP) || defined(WIN32_FD_HANDLES)
|
# if defined(FILES_HAVE_FDS) || defined(USE_TCP) || defined(WIN32_FD_HANDLES)
|
||||||
return ((fdset_type *)fdarray) + pos;
|
return ((fdset_type *)fdarray) + pos;
|
||||||
# else
|
# else
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1200,7 +1200,7 @@ void scheme_fdzero(void *fd)
|
||||||
# if defined(WIN32_FD_HANDLES)
|
# if defined(WIN32_FD_HANDLES)
|
||||||
scheme_init_fdset_array(fd, 1);
|
scheme_init_fdset_array(fd, 1);
|
||||||
# else
|
# else
|
||||||
# if defined(FILES_HAVE_FDS) || defined(USE_SOCKETS_TCP)
|
# if defined(FILES_HAVE_FDS) || defined(USE_TCP)
|
||||||
FD_ZERO((fd_set *)fd);
|
FD_ZERO((fd_set *)fd);
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
@ -1218,7 +1218,7 @@ void scheme_fdclr(void *fd, int n)
|
||||||
efd->sockets[i] = INVALID_SOCKET;
|
efd->sockets[i] = INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
# if defined(FILES_HAVE_FDS) || defined(USE_SOCKETS_TCP)
|
# if defined(FILES_HAVE_FDS) || defined(USE_TCP)
|
||||||
FD_CLR((unsigned)n, ((fd_set *)fd));
|
FD_CLR((unsigned)n, ((fd_set *)fd));
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -1241,7 +1241,7 @@ void scheme_fdset(void *fd, int n)
|
||||||
efd->sockets[SCHEME_INT_VAL(efd->added)] = n;
|
efd->sockets[SCHEME_INT_VAL(efd->added)] = n;
|
||||||
efd->added = scheme_make_integer(1 + SCHEME_INT_VAL(efd->added));
|
efd->added = scheme_make_integer(1 + SCHEME_INT_VAL(efd->added));
|
||||||
#else
|
#else
|
||||||
# if defined(FILES_HAVE_FDS) || defined(USE_SOCKETS_TCP)
|
# if defined(FILES_HAVE_FDS) || defined(USE_TCP)
|
||||||
# ifdef STORED_ACTUAL_FDSET_LIMIT
|
# ifdef STORED_ACTUAL_FDSET_LIMIT
|
||||||
int mx;
|
int mx;
|
||||||
mx = FDSET_LIMIT(fd);
|
mx = FDSET_LIMIT(fd);
|
||||||
|
@ -1264,7 +1264,7 @@ int scheme_fdisset(void *fd, int n)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
# if defined(FILES_HAVE_FDS) || defined(USE_SOCKETS_TCP)
|
# if defined(FILES_HAVE_FDS) || defined(USE_TCP)
|
||||||
return FD_ISSET(n, ((fd_set *)fd));
|
return FD_ISSET(n, ((fd_set *)fd));
|
||||||
# else
|
# else
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -374,7 +374,7 @@ Scheme_Logger *scheme_get_future_logger(void);
|
||||||
Scheme_Logger *scheme_get_place_logger(void);
|
Scheme_Logger *scheme_get_place_logger(void);
|
||||||
void scheme_init_logger_config(void);
|
void scheme_init_logger_config(void);
|
||||||
|
|
||||||
void register_network_evts();
|
void scheme_register_network_evts();
|
||||||
|
|
||||||
void scheme_free_dynamic_extensions(void);
|
void scheme_free_dynamic_extensions(void);
|
||||||
void scheme_free_all_code(void);
|
void scheme_free_all_code(void);
|
||||||
|
@ -3791,14 +3791,10 @@ extern char *scheme_convert_from_wchar(const wchar_t *ws);
|
||||||
#ifdef NO_TCP_SUPPORT
|
#ifdef NO_TCP_SUPPORT
|
||||||
# undef USE_UNIX_SOCKETS_TCP
|
# undef USE_UNIX_SOCKETS_TCP
|
||||||
# undef USE_WINSOCK_TCP
|
# undef USE_WINSOCK_TCP
|
||||||
# undef USE_MAC_TCP
|
|
||||||
#endif
|
|
||||||
#if defined(USE_UNIX_SOCKETS_TCP) || defined(USE_WINSOCK_TCP) || defined(USE_MAC_TCP)
|
|
||||||
# define USE_TCP
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_UNIX_SOCKETS_TCP) || defined(USE_WINSOCK_TCP)
|
#if defined(USE_UNIX_SOCKETS_TCP) || defined(USE_WINSOCK_TCP)
|
||||||
# define USE_SOCKETS_TCP
|
# define USE_TCP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
THREAD_LOCAL_DECL(extern int scheme_active_but_sleeping);
|
THREAD_LOCAL_DECL(extern int scheme_active_but_sleeping);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user