📄 ckcnet.c
字号:
if (getsockopt(ttyfd, SOL_SOCKET, SO_RCVBUF, (char *)&i, &x)) { debug(F111,"TCP recvbuf can't get SO_RCVBUF",ck_errstr(),errno); } else if (x != sizeof(i)) {#ifdef OS2 short i16,j16; if ( x == sizeof(i16) ) { debug(F111,"TCP recvbuf warning: SO_RCVBUF","len is 16-bit",x); if (getsockopt(ttyfd, SOL_SOCKET, SO_RCVBUF, (char *)&i16, &x) ) { debug(F111,"TCP recvbuf can't get SO_RCVBUF", ck_errstr(),errno); } else if (size <= 0) { tcp_recvbuf = i16; debug(F101,"TCP recvbuf SO_RCVBUF retrieved","",i16); return 1; } else if (i16 != size) { j16 = size; if (setsockopt(ttyfd, SOL_SOCKET, SO_RCVBUF, (char *)&j16, sizeof(j16))) { debug(F111,"TCP recvbuf can' set SO_RCVBUF", ck_errstr(),errno); } else { debug(F101,"TCP recvbuf old SO_RCVBUF","",i16); debug(F101,"TCP recvbuf new SO_RCVBUF","",j16); tcp_recvbuf = size; return 1; } } else { debug(F101,"TCP recvbuf SO_RCVBUF unchanged","",i16); tcp_recvbuf = size; return 1; } return(0); }#endif /* OS2 */ debug(F111,"TCP recvbuf error: SO_RCVBUF","len",x); debug(F111,"TCP recvbuf SO_RCVBUF","expected len",sizeof(i)); debug(F111,"TCP recvbuf SO_RCVBUF","i",i); } else if (size <= 0) { tcp_recvbuf = i; debug(F101,"TCP recvbuf SO_RCVBUF retrieved","",i); return 1; } else if (i != size) { j = size; if (setsockopt(ttyfd, SOL_SOCKET, SO_RCVBUF, (char *)&j, sizeof(j))) { debug(F111,"TCP recvbuf can't set SO_RCVBUF",ck_errstr(),errno); tcp_recvbuf = i; } else { debug(F101,"TCP recvbuf old SO_RCVBUF","",i); debug(F101,"TCP recvbuf new SO_RCVBUF","",j); tcp_recvbuf = size; return 1; } } else { debug(F101,"TCP recvbuf SO_RCVBUF unchanged","",i); tcp_recvbuf = size; return 1; }#else debug(F100,"TCP recvbuf SO_RCVBUF not defined","",0);#endif /* SO_RCVBUF */#else debug(F100,"TCP recvbuf SO_SOCKET not defined","",0);#endif /* SOL_SOCKET */ return 0;}intkeepalive(onoff) int onoff; {#ifdef SOL_SOCKET#ifdef SO_KEEPALIVE int get_keepalive_opt; int set_keepalive_opt; SOCKOPT_T x; if (ttyfd == -1 || nettype != NET_TCPA && nettype != NET_TCPB || ttmdm >= 0) { tcp_keepalive = onoff; return 1; } x = sizeof(get_keepalive_opt); if (getsockopt(ttyfd, SOL_SOCKET, SO_KEEPALIVE, (char *)&get_keepalive_opt, &x)) { debug(F111,"TCP keepalive can't get SO_KEEPALIVE",ck_errstr(),errno); } else if (x != sizeof(get_keepalive_opt)) {#ifdef OS2 short get_keepalive_opt16; short set_keepalive_opt16; if (x == sizeof(get_keepalive_opt16)) { debug(F111,"TCP keepalive warning: SO_KEEPALIVE", "len is 16-bit",x); if (getsockopt(ttyfd, SOL_SOCKET, SO_KEEPALIVE, (char *)&get_keepalive_opt16, &x) ) { debug(F111, "TCP keepalive can't get SO_KEEPALIVE", ck_errstr(), errno ); } else if (get_keepalive_opt16 != onoff) { set_keepalive_opt16 = onoff; if (setsockopt(ttyfd, SOL_SOCKET, SO_KEEPALIVE, (char *)&set_keepalive_opt16, sizeof(set_keepalive_opt16)) ) { debug(F111, "TCP keepalive can't clear SO_KEEPALIVE", ck_errstr(), errno ); tcp_keepalive = get_keepalive_opt16; } else { debug(F101, "TCP keepalive new SO_KEEPALIVE","", set_keepalive_opt16); tcp_keepalive = set_keepalive_opt16; return 1; } } else { debug(F101,"TCP keepalive SO_KEEPALIVE unchanged","", get_keepalive_opt16); tcp_keepalive = onoff; return 1; } return(0); }#endif /* OS2 */ debug(F111,"TCP keepalive error: SO_KEEPALIVE","len",x); debug(F111, "TCP keepalive SO_KEEPALIVE", "expected len", sizeof(get_keepalive_opt) ); debug(F111, "TCP keepalive SO_KEEPALIVE", "keepalive_opt", get_keepalive_opt ); } else if (get_keepalive_opt != onoff) { set_keepalive_opt = onoff; if (setsockopt(ttyfd, SOL_SOCKET, SO_KEEPALIVE, (char *)&set_keepalive_opt, sizeof(set_keepalive_opt)) ) { debug(F111, "TCP keepalive can't clear SO_KEEPALIVE", ck_errstr(), errno ); tcp_keepalive = get_keepalive_opt; } else { debug(F101, "TCP keepalive new SO_KEEPALIVE", "", set_keepalive_opt ); tcp_keepalive = onoff; return 1; } } else { debug(F101,"TCP keepalive SO_KEEPALIVE unchanged", "", get_keepalive_opt ); tcp_keepalive = onoff; return 1; }#else debug(F100,"TCP keepalive SO_KEEPALIVE not defined","",0);#endif /* SO_KEEPALIVE */#else debug(F100,"TCP keepalive SO_SOCKET not defined","",0);#endif /* SOL_SOCKET */ return(0);}intdontroute(onoff) int onoff; {#ifdef SOL_SOCKET#ifdef SO_DONTROUTE int get_dontroute_opt; int set_dontroute_opt; SOCKOPT_T x; if (ttyfd == -1 || nettype != NET_TCPA && nettype != NET_TCPB || ttmdm >= 0) { tcp_dontroute = onoff; return 1; } x = sizeof(get_dontroute_opt); if (getsockopt(ttyfd, SOL_SOCKET, SO_DONTROUTE, (char *)&get_dontroute_opt, &x)) { debug(F111,"TCP dontroute can't get SO_DONTROUTE",ck_errstr(),errno); } else if (x != sizeof(get_dontroute_opt)) {#ifdef OS2 short get_dontroute_opt16; short set_dontroute_opt16; if (x == sizeof(get_dontroute_opt16)) { debug(F111,"TCP dontroute warning: SO_DONTROUTE", "len is 16-bit",x); if (getsockopt(ttyfd, SOL_SOCKET, SO_DONTROUTE, (char *)&get_dontroute_opt16, &x) ) { debug(F111, "TCP dontroute can't get SO_DONTROUTE", ck_errstr(), errno ); } else if (get_dontroute_opt16 != onoff) { set_dontroute_opt16 = onoff; if (setsockopt(ttyfd, SOL_SOCKET, SO_DONTROUTE, (char *)&set_dontroute_opt16, sizeof(set_dontroute_opt16)) ) { debug(F111, "TCP dontroute can't clear SO_DONTROUTE", ck_errstr(), errno ); tcp_dontroute = get_dontroute_opt16; } else { debug(F101, "TCP dontroute new SO_DONTROUTE","", set_dontroute_opt16); tcp_dontroute = set_dontroute_opt16; return 1; } } else { debug(F101,"TCP dontroute SO_DONTROUTE unchanged","", get_dontroute_opt16); tcp_dontroute = onoff; return 1; } return(0); }#endif /* OS2 */ debug(F111,"TCP dontroute error: SO_DONTROUTE","len",x); debug(F111, "TCP dontroute SO_DONTROUTE", "expected len", sizeof(get_dontroute_opt) ); debug(F111, "TCP dontroute SO_DONTROUTE", "dontroute_opt", get_dontroute_opt ); } else if (get_dontroute_opt != onoff) { set_dontroute_opt = onoff; if (setsockopt(ttyfd, SOL_SOCKET, SO_DONTROUTE, (char *)&set_dontroute_opt, sizeof(set_dontroute_opt)) ) { debug(F111, "TCP dontroute can't clear SO_DONTROUTE", ck_errstr(), errno ); tcp_dontroute = get_dontroute_opt; } else { debug(F101, "TCP dontroute new SO_DONTROUTE", "", set_dontroute_opt ); tcp_dontroute = onoff; return 1; } } else { debug(F101,"TCP dontroute SO_DONTROUTE unchanged", "", get_dontroute_opt ); tcp_dontroute = onoff; return 1; }#else debug(F100,"TCP dontroute SO_DONTROUTE not defined","",0);#endif /* SO_DONTROUTE */#else debug(F100,"TCP dontroute SO_SOCKET not defined","",0);#endif /* SOL_SOCKET */ return(0);}intno_delay(onoff) int onoff; {#ifdef SOL_SOCKET#ifdef TCP_NODELAY int get_nodelay_opt; int set_nodelay_opt; SOCKOPT_T x; if (ttyfd == -1 || nettype != NET_TCPA && nettype != NET_TCPB || ttmdm >= 0) { tcp_nodelay = onoff; return(1); } x = sizeof(get_nodelay_opt); if (getsockopt(ttyfd,IPPROTO_TCP,TCP_NODELAY, (char *)&get_nodelay_opt,&x)) { debug(F111, "TCP no_delay can't get TCP_NODELAY", ck_errstr(), errno); } else if (x != sizeof(get_nodelay_opt)) {#ifdef OS2 short get_nodelay_opt16; short set_nodelay_opt16; if (x == sizeof(get_nodelay_opt16)) { debug(F111,"TCP no_delay warning: TCP_NODELAY","len is 16-bit",x); if (getsockopt(ttyfd, IPPROTO_TCP, TCP_NODELAY, (char *)&get_nodelay_opt16, &x) ) { debug(F111, "TCP no_delay can't get TCP_NODELAY", ck_errstr(), errno); } else if (get_nodelay_opt16 != onoff) { set_nodelay_opt16 = onoff; if (setsockopt(ttyfd, IPPROTO_TCP, TCP_NODELAY, (char *)&set_nodelay_opt16, sizeof(set_nodelay_opt16)) ) { debug(F111, "TCP no_delay can't clear TCP_NODELAY", ck_errstr(), errno); tcp_nodelay = get_nodelay_opt16; } else { debug(F101, "TCP no_delay new TCP_NODELAY", "", set_nodelay_opt16); tcp_nodelay = onoff; return 1; } } else { debug(F101,"TCP no_delay TCP_NODELAY unchanged","", get_nodelay_opt16); tcp_nodelay = onoff; return 1; } return(0); }#endif /* OS2 */ debug(F111,"TCP no_delay error: TCP_NODELAY","len",x); debug(F111,"TCP no_delay TCP_NODELAY","expected len", sizeof(get_nodelay_opt)); debug(F111,"TCP no_delay TCP_NODELAY","nodelay_opt",get_nodelay_opt); } else if (get_nodelay_opt != onoff) { set_nodelay_opt = onoff; if (setsockopt(ttyfd, IPPROTO_TCP, TCP_NODELAY, (char *)&set_nodelay_opt, sizeof(set_nodelay_opt))) { debug(F111, "TCP no_delay can't clear TCP_NODELAY", ck_errstr(), errno ); tcp_nodelay = get_nodelay_opt; } else { debug(F101,"TCP no_delay new TCP_NODELAY","",set_nodelay_opt); tcp_nodelay = onoff; return 1; } } else { debug(F101,"TCP no_delay TCP_NODELAY unchanged","",get_nodelay_opt); tcp_nodelay = onoff; return(1); }#else debug(F100,"TCP no_delay TCP_NODELAY not defined","",0);#endif /* TCP_NODELAY */#else debug(F100,"TCP no_delay SO_SOCKET not defined","",0);#endif /* SOL_SOCKET */ return 0;}#endif /* datageneral */#endif /* NOTCPOPTS */#ifdef SUNX25#ifndef X25_WR_FACILITY/* For Solaris 2.3 / SunLink 8.x - see comments in ckcnet.h */voidbzero(s,n) char *s; int n; { memset(s,0,n);}#endif /* X25_WR_FACILITY */#endif /* SUNX25 */#ifdef TCPSOCKET#ifndef OS2#ifndef NOLISTEN#ifdef BSDSELECT#ifndef VMS#ifndef BELLV10#ifndef datageneral#ifdef hp9000s500 /* HP-9000/500 HP-U 5.21 */#include <time.h>#else/****** THIS SECTION ADDED BY STEVE RANCE - OS9 NETWORK SERVER* -------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -