⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ckcnet.c

📁 C-Kermit源码。是使用串口/Modem和网络通讯的程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -