📄 tcp.c
字号:
/* Generated from tcp.scm by the CHICKEN compiler http://www.call-with-current-continuation.org 2008-09-23 22:55 Version 3.3.0 - linux-unix-gnu-x86 [ manyargs dload ptables applyhook ] SVN rev. 11106 compiled 2008-07-08 on galinha (Linux) command line: tcp.scm -quiet -no-trace -optimize-level 2 -include-path . -include-path ./ -explicit-use -output-file tcp.c unit: tcp*/#include "chicken.h"#include <errno.h>#ifdef _WIN32# if _MSC_VER > 1300# include <winsock2.h># include <ws2tcpip.h># else# include <winsock.h># endif/* Beware: winsock2.h must come BEFORE windows.h */# define socklen_t intstatic WSADATA wsa;# define fcntl(a, b, c) 0# define EWOULDBLOCK 0# define EINPROGRESS 0# define typecorrect_getsockopt(socket, level, optname, optval, optlen) \ getsockopt(socket, level, optname, (char *)optval, optlen)#else# include <fcntl.h># include <sys/types.h># include <sys/socket.h># include <sys/time.h># include <netinet/in.h># include <unistd.h># include <netdb.h># include <signal.h># define closesocket close# define INVALID_SOCKET -1# define typecorrect_getsockopt getsockopt#endif#ifndef SD_RECEIVE# define SD_RECEIVE 0# define SD_SEND 1#endif#ifdef ECOS#include <sys/sockio.h>#endifstatic char addr_buffer[ 20 ];static C_PTABLE_ENTRY *create_ptable(void);C_noret_decl(C_data_structures_toplevel)C_externimport void C_ccall C_data_structures_toplevel(C_word c,C_word d,C_word k) C_noret;C_noret_decl(C_ports_toplevel)C_externimport void C_ccall C_ports_toplevel(C_word c,C_word d,C_word k) C_noret;C_noret_decl(C_extras_toplevel)C_externimport void C_ccall C_extras_toplevel(C_word c,C_word d,C_word k) C_noret;C_noret_decl(C_scheduler_toplevel)C_externimport void C_ccall C_scheduler_toplevel(C_word c,C_word d,C_word k) C_noret;static C_TLS C_word lf[97];static double C_possibly_force_alignment;static C_char C_TLS li0[] C_aligned={C_lihdr(0,0,22),40,35,35,110,101,116,35,115,111,99,107,101,116,32,97,49,54,32,97,48,55,41,0,0};static C_char C_TLS li1[] C_aligned={C_lihdr(0,0,13),40,35,35,110,101,116,35,99,108,111,115,101,41,0,0,0};static C_char C_TLS li2[] C_aligned={C_lihdr(0,0,22),40,35,35,110,101,116,35,115,104,117,116,100,111,119,110,32,97,53,50,53,55,41,0,0};static C_char C_TLS li3[] C_aligned={C_lihdr(0,0,24),40,35,35,110,101,116,35,109,97,107,101,45,110,111,110,98,108,111,99,107,105,110,103,41};static C_char C_TLS li4[] C_aligned={C_lihdr(0,0,19),40,35,35,110,101,116,35,103,101,116,115,111,99,107,112,111,114,116,41,0,0,0,0,0};static C_char C_TLS li5[] C_aligned={C_lihdr(0,0,14),40,35,35,110,101,116,35,115,101,108,101,99,116,41,0,0};static C_char C_TLS li6[] C_aligned={C_lihdr(0,0,43),40,35,35,110,101,116,35,103,101,116,104,111,115,116,97,100,100,114,32,97,49,50,54,49,51,49,32,97,49,50,53,49,51,50,32,97,49,50,52,49,51,51,41,0,0,0,0,0};static C_char C_TLS li7[] C_aligned={C_lihdr(0,0,6),40,97,55,53,54,41,0,0};static C_char C_TLS li8[] C_aligned={C_lihdr(0,0,16),40,97,55,52,55,32,114,101,116,117,114,110,49,51,54,41};static C_char C_TLS li9[] C_aligned={C_lihdr(0,0,7),40,121,105,101,108,100,41,0};static C_char C_TLS li10[] C_aligned={C_lihdr(0,0,11),40,108,111,111,112,32,105,49,52,52,41,0,0,0,0,0};static C_char C_TLS li11[] C_aligned={C_lihdr(0,0,35),40,35,35,110,101,116,35,112,97,114,115,101,45,104,111,115,116,32,104,111,115,116,49,52,48,32,112,114,111,116,111,49,52,49,41,0,0,0,0,0};static C_char C_TLS li12[] C_aligned={C_lihdr(0,0,15),40,102,95,57,51,49,32,97,49,54,54,49,54,57,41,0};static C_char C_TLS li13[] C_aligned={C_lihdr(0,0,6),40,97,57,54,54,41,0,0};static C_char C_TLS li14[] C_aligned={C_lihdr(0,0,25),40,97,57,55,50,32,115,49,57,50,49,57,52,32,97,100,100,114,49,57,51,49,57,53,41,0,0,0,0,0,0,0};static C_char C_TLS li15[] C_aligned={C_lihdr(0,0,22),40,98,111,100,121,49,56,52,32,119,49,57,48,32,104,111,115,116,49,57,49,41,0,0};static C_char C_TLS li16[] C_aligned={C_lihdr(0,0,22),40,100,101,102,45,104,111,115,116,49,56,55,32,37,119,49,56,50,50,48,51,41,0,0};static C_char C_TLS li17[] C_aligned={C_lihdr(0,0,10),40,100,101,102,45,119,49,56,54,41,0,0,0,0,0,0};static C_char C_TLS li18[] C_aligned={C_lihdr(0,0,30),40,116,99,112,45,108,105,115,116,101,110,32,112,111,114,116,49,56,48,32,46,32,109,111,114,101,49,56,49,41,0,0};static C_char C_TLS li19[] C_aligned={C_lihdr(0,0,20),40,116,99,112,45,108,105,115,116,101,110,101,114,63,32,120,50,49,48,41,0,0,0,0};static C_char C_TLS li20[] C_aligned={C_lihdr(0,0,19),40,116,99,112,45,99,108,111,115,101,32,116,99,112,108,50,49,49,41,0,0,0,0,0};static C_char C_TLS li21[] C_aligned={C_lihdr(0,0,13),40,102,95,49,49,50,49,32,120,50,49,56,41,0,0,0};static C_char C_TLS li22[] C_aligned={C_lihdr(0,0,14),40,99,104,101,99,107,32,108,111,99,50,49,55,41,0,0};static C_char C_TLS li23[] C_aligned={C_lihdr(0,0,6),40,108,111,111,112,41,0,0};static C_char C_TLS li24[] C_aligned={C_lihdr(0,0,12),40,114,101,97,100,45,105,110,112,117,116,41,0,0,0,0};static C_char C_TLS li25[] C_aligned={C_lihdr(0,0,23),40,108,111,111,112,32,108,101,110,50,57,53,32,111,102,102,115,101,116,50,57,54,41,0};static C_char C_TLS li26[] C_aligned={C_lihdr(0,0,13),40,111,117,116,112,117,116,32,115,50,57,51,41,0,0,0};static C_char C_TLS li27[] C_aligned={C_lihdr(0,0,13),40,102,95,49,52,52,56,32,115,51,48,54,41,0,0,0};static C_char C_TLS li28[] C_aligned={C_lihdr(0,0,13),40,102,95,49,52,54,56,32,115,51,48,57,41,0,0,0};static C_char C_TLS li29[] C_aligned={C_lihdr(0,0,7),40,97,49,51,54,56,41,0};static C_char C_TLS li30[] C_aligned={C_lihdr(0,0,8),40,102,95,49,52,51,50,41};static C_char C_TLS li31[] C_aligned={C_lihdr(0,0,7),40,97,49,52,56,51,41,0};static C_char C_TLS li32[] C_aligned={C_lihdr(0,0,7),40,97,49,53,48,53,41,0};static C_char C_TLS li33[] C_aligned={C_lihdr(0,0,7),40,97,49,53,52,48,41,0};static C_char C_TLS li34[] C_aligned={C_lihdr(0,0,25),40,108,111,111,112,32,110,50,54,56,32,109,50,54,57,32,115,116,97,114,116,50,55,48,41,0,0,0,0,0,0,0};static C_char C_TLS li35[] C_aligned={C_lihdr(0,0,34),40,97,49,53,56,51,32,112,50,54,51,32,110,50,54,52,32,100,101,115,116,50,54,53,32,115,116,97,114,116,50,54,54,41,0,0,0,0,0,0};static C_char C_TLS li36[] C_aligned={C_lihdr(0,0,23),40,97,49,54,54,54,32,112,111,115,50,50,56,49,32,110,101,120,116,50,56,50,41,0};static C_char C_TLS li37[] C_aligned={C_lihdr(0,0,13),40,108,111,111,112,32,115,116,114,50,56,48,41,0,0,0};static C_char C_TLS li38[] C_aligned={C_lihdr(0,0,21),40,97,49,54,52,56,32,112,50,55,55,32,108,105,109,105,116,50,55,56,41,0,0,0};static C_char C_TLS li39[] C_aligned={C_lihdr(0,0,22),40,35,35,110,101,116,35,105,111,45,112,111,114,116,115,32,102,100,50,50,57,41,0,0};static C_char C_TLS li40[] C_aligned={C_lihdr(0,0,6),40,108,111,111,112,41,0,0};static C_char C_TLS li41[] C_aligned={C_lihdr(0,0,20),40,116,99,112,45,97,99,99,101,112,116,32,116,99,112,108,51,50,51,41,0,0,0,0};static C_char C_TLS li42[] C_aligned={C_lihdr(0,0,27),40,116,99,112,45,97,99,99,101,112,116,45,114,101,97,100,121,63,32,116,99,112,108,51,51,54,41,0,0,0,0,0};static C_char C_TLS li43[] C_aligned={C_lihdr(0,0,6),40,102,97,105,108,41,0,0};static C_char C_TLS li44[] C_aligned={C_lihdr(0,0,6),40,108,111,111,112,41,0,0};static C_char C_TLS li45[] C_aligned={C_lihdr(0,0,7),40,97,50,49,49,52,41,0};static C_char C_TLS li46[] C_aligned={C_lihdr(0,0,29),40,97,50,49,50,48,32,104,111,115,116,51,53,54,51,53,56,32,112,111,114,116,51,53,55,51,53,57,41,0,0,0};static C_char C_TLS li47[] C_aligned={C_lihdr(0,0,31),40,116,99,112,45,99,111,110,110,101,99,116,32,104,111,115,116,51,53,48,32,46,32,109,111,114,101,51,53,49,41,0};static C_char C_TLS li48[] C_aligned={C_lihdr(0,0,29),40,35,35,115,121,115,35,116,99,112,45,112,111,114,116,45,62,102,105,108,101,110,111,32,112,51,56,55,41,0,0,0};static C_char C_TLS li49[] C_aligned={C_lihdr(0,0,20),40,116,99,112,45,97,100,100,114,101,115,115,101,115,32,112,51,56,56,41,0,0,0,0};static C_char C_TLS li50[] C_aligned={C_lihdr(0,0,23),40,116,99,112,45,112,111,114,116,45,110,117,109,98,101,114,115,32,112,51,57,52,41,0};static C_char C_TLS li51[] C_aligned={C_lihdr(0,0,27),40,116,99,112,45,108,105,115,116,101,110,101,114,45,112,111,114,116,32,116,99,112,108,52,48,48,41,0,0,0,0,0};static C_char C_TLS li52[] C_aligned={C_lihdr(0,0,23),40,116,99,112,45,97,98,97,110,100,111,110,45,112,111,114,116,32,112,52,48,53,41,0};static C_char C_TLS li53[] C_aligned={C_lihdr(0,0,26),40,116,99,112,45,108,105,115,116,101,110,101,114,45,102,105,108,101,110,111,32,108,52,48,55,41,0,0,0,0,0,0};static C_char C_TLS li54[] C_aligned={C_lihdr(0,0,10),40,116,111,112,108,101,118,101,108,41,0,0,0,0,0,0};/* from k1894 */static C_word C_fcall stub346(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub346(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int t0=(int )C_unfix(C_a0);C_r=C_mpointer(&C_a,(void*)strerror(t0));return C_r;}/* from k1883 */#define return(x) C_cblock C_r = (C_fix((C_word)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub342(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub342(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int socket=(int )C_unfix(C_a0);int err, optlen;optlen = sizeof(err);if (typecorrect_getsockopt(socket, SOL_SOCKET, SO_ERROR, &err, (socklen_t *)&optlen) == -1)return(-1);return(err);C_ret:#undef returnreturn C_r;}/* from k934 */#define return(x) C_cblock C_r = (C_fix((C_word)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub167(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub167(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int socket=(int )C_unfix(C_a0);int yes = 1; return(setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, (const char *)&yes, sizeof(int)));C_ret:#undef returnreturn C_r;}/* from k842 */#define return(x) C_cblock C_r = (((C_word)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub153(C_word C_buf,C_word C_a0,C_word C_a1) C_regparm;C_regparm static C_word C_fcall stub153(C_word C_buf,C_word C_a0,C_word C_a1){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;void * saddr=(void * )C_data_pointer_or_null(C_a0);unsigned short port=(unsigned short )(unsigned short)C_unfix(C_a1);struct sockaddr_in *addr = (struct sockaddr_in *)saddr;memset(addr, 0, sizeof(struct sockaddr_in));addr->sin_family = AF_INET;addr->sin_port = htons(port);addr->sin_addr.s_addr = htonl(INADDR_ANY);C_ret:#undef returnreturn C_r;}/* from k728 */#define return(x) C_cblock C_r = (C_mk_bool((x))); goto C_ret; C_cblockendstatic C_word C_fcall stub127(C_word C_buf,C_word C_a0,C_word C_a1,C_word C_a2) C_regparm;C_regparm static C_word C_fcall stub127(C_word C_buf,C_word C_a0,C_word C_a1,C_word C_a2){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;void * saddr=(void * )C_data_pointer_or_null(C_a0);char * host=(char * )C_string_or_null(C_a1);unsigned short port=(unsigned short )(unsigned short)C_unfix(C_a2);struct hostent *he = gethostbyname(host);struct sockaddr_in *addr = (struct sockaddr_in *)saddr;if(he == NULL) return(0);memset(addr, 0, sizeof(struct sockaddr_in));addr->sin_family = AF_INET;addr->sin_port = htons((short)port);addr->sin_addr = *((struct in_addr *)he->h_addr);return(1);C_ret:#undef returnreturn C_r;}/* from k713 */#define return(x) C_cblock C_r = (C_fix((C_word)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub121(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub121(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int fd=(int )C_unfix(C_a0);fd_set out; struct timeval tm; int rv; FD_ZERO(&out); FD_SET(fd, &out); tm.tv_sec = tm.tv_usec = 0; rv = select(fd + 1, NULL, &out, NULL, &tm); if(rv > 0) { rv = FD_ISSET(fd, &out) ? 1 : 0; } return(rv);C_ret:#undef returnreturn C_r;}/* from k706 */#define return(x) C_cblock C_r = (C_fix((C_word)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub117(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub117(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int fd=(int )C_unfix(C_a0);fd_set in; struct timeval tm; int rv; FD_ZERO(&in); FD_SET(fd, &in); tm.tv_sec = tm.tv_usec = 0; rv = select(fd + 1, &in, NULL, NULL, &tm); if(rv > 0) { rv = FD_ISSET(fd, &in) ? 1 : 0; } return(rv);C_ret:#undef returnreturn C_r;}/* from k685 in k681 in k797 in k793 in loop in ##net#parse-host in k674 in k476 in k473 in k470 in k467 in k464 */#define return(x) C_cblock C_r = (C_fix((C_word)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub108(C_word C_buf,C_word C_a0,C_word C_a1) C_regparm;C_regparm static C_word C_fcall stub108(C_word C_buf,C_word C_a0,C_word C_a1){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;char * serv=(char * )C_string_or_null(C_a0);char * proto=(char * )C_string_or_null(C_a1);struct servent *se; if((se = getservbyname(serv, proto)) == NULL) return(0); else return(ntohs(se->s_port));C_ret:#undef returnreturn C_r;}/* from ##net#startup */#define return(x) C_cblock C_r = (C_mk_bool((x))); goto C_ret; C_cblockendstatic C_word C_fcall stub104(C_word C_buf) C_regparm;C_regparm static C_word C_fcall stub104(C_word C_buf){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;#ifdef _WIN32 return(WSAStartup(MAKEWORD(1, 1), &wsa) == 0);#else signal(SIGPIPE, SIG_IGN); return(1);#endifC_ret:#undef returnreturn C_r;}/* from k668 */#define return(x) C_cblock C_r = (C_mpointer(&C_a,(void*)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub100(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub100(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int s=(int )C_unfix(C_a0);struct sockaddr_in sa;unsigned char *ptr;unsigned int len = sizeof(struct sockaddr_in);if(getpeername(s, (struct sockaddr *)&sa, ((unsigned int *)&len)) != 0) return(NULL);ptr = (unsigned char *)&sa.sin_addr;sprintf(addr_buffer, "%d.%d.%d.%d", ptr[ 0 ], ptr[ 1 ], ptr[ 2 ], ptr[ 3 ]);return(addr_buffer);C_ret:#undef returnreturn C_r;}/* from k657 */#define return(x) C_cblock C_r = (C_fix((C_word)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub96(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub96(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int s=(int )C_unfix(C_a0);struct sockaddr_in sa;int len = sizeof(struct sockaddr_in);if(getpeername(s, (struct sockaddr *)&sa, (socklen_t *)(&len)) != 0) return(-1);else return(ntohs(sa.sin_port));C_ret:#undef returnreturn C_r;}/* from k650 */#define return(x) C_cblock C_r = (C_fix((C_word)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub92(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub92(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int s=(int )C_unfix(C_a0);struct sockaddr_in sa;int len = sizeof(struct sockaddr_in);if(getsockname(s, (struct sockaddr *)&sa, (socklen_t *)(&len)) != 0) return(-1);else return(ntohs(sa.sin_port));C_ret:#undef returnreturn C_r;}/* from k643 */#define return(x) C_cblock C_r = (C_mpointer(&C_a,(void*)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub87(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub87(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int s=(int )C_unfix(C_a0);struct sockaddr_in sa;unsigned char *ptr;int len = sizeof(struct sockaddr_in);if(getsockname(s, (struct sockaddr *)&sa, (socklen_t *)&len) != 0) return(NULL);ptr = (unsigned char *)&sa.sin_addr;sprintf(addr_buffer, "%d.%d.%d.%d", ptr[ 0 ], ptr[ 1 ], ptr[ 2 ], ptr[ 3 ]);return(addr_buffer);C_ret:#undef returnreturn C_r;}/* from k632 */#define return(x) C_cblock C_r = (C_mk_bool((x))); goto C_ret; C_cblockendstatic C_word C_fcall stub83(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub83(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int fd=(int )C_unfix(C_a0);int val = fcntl(fd, F_GETFL, 0);if(val == -1) return(0);return(fcntl(fd, F_SETFL, val | O_NONBLOCK) != -1);C_ret:#undef returnreturn C_r;}/* from k622 */#define return(x) C_cblock C_r = (C_fix((C_word)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub73(C_word C_buf,C_word C_a0,C_word C_a1,C_word C_a2,C_word C_a3,C_word C_a4) C_regparm;C_regparm static C_word C_fcall stub73(C_word C_buf,C_word C_a0,C_word C_a1,C_word C_a2,C_word C_a3,C_word C_a4){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -