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

📄 tcp_tools.c

📁 sco unix下socket接收发送串函数
💻 C
字号:
#include <stdio.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <signal.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#ifdef DEBUGextern FILE *debugfp;#endifvoid alarm_proc(int i) { return; }int connect_corp(char *ipaddr,int portnum,int MAXRETRY,int TIMEOUT){    int sockid;    struct sockaddr_in ip;    int rev;#ifdef DEBUGfprintf(debugfp,"Connect: %s %d\n",ipaddr,portnum);#endif    sockid=socket(AF_INET,SOCK_STREAM,0);    if(sockid<0) return(-1);   //EE    memset((char *)&ip,0,sizeof(ip));    ip.sin_family=AF_INET;    ip.sin_addr.s_addr=inet_addr(ipaddr);    if(ip.sin_addr.s_addr==0XFFFFFFFF) return(-3); //EE    ip.sin_port=htons(portnum);    for(;MAXRETRY>0;MAXRETRY--)    {       signal(SIGALRM,alarm_proc);       alarm(TIMEOUT);       rev=connect(sockid,(struct sockaddr *)&ip,sizeof(ip));       if(rev==0) break;    }    signal(SIGALRM,SIG_IGN);    printf("connect=%d\n",rev);    if(rev) return -2; //EE    return sockid;}int readn(int sockid,char *buf,int len,int MAXRETRY,int TIMEOUT){    int rd,rn;    #ifdef DEBUG    fprintf(debugfp,"\n++++++++++++++++++++++ READ  %d +++++++++++++++++++++++++++++\n[",len);    fflush(debugfp);    #endif    for(rd=0;rd<len&&MAXRETRY>0;MAXRETRY--)    {       signal(SIGALRM,alarm_proc);       alarm(TIMEOUT);       rn=read(sockid,buf+rd,len-rd);       if(rn>0) rd+=rn;    }    #ifdef DEBUG    fwrite(buf,len,1,debugfp);    fprintf(debugfp,"]\n++++++++++++++++++++++ READ  END +++++++++++++++++++++++++++++\n");    fflush(debugfp);    #endif    signal(SIGALRM,SIG_IGN);    if(rd==0&&rn<0) return -1;    else return rd;}int writen(int sockid,char *buf,int len,int MAXRETRY,int TIMEOUT){    int rd,rn;    FILE *fp;    fp=fopen("/tmp/koko","w");    fprintf(fp,"%s",buf);    #ifdef DEBUG    fprintf(debugfp,"\n====================== WRITE %d =============================\n[",len);    fwrite(buf,len,1,debugfp);    fprintf(debugfp,"]\n====================== WRITE END =============================\n");    fflush(debugfp);    #endif    for(rd=0;rd<len&&MAXRETRY>0;MAXRETRY--)    {       signal(SIGALRM,alarm_proc);       alarm(TIMEOUT);       rn=write(sockid,buf+rd,len-rd);       if(rn>0) rd+=rn;    }    signal(SIGALRM,SIG_IGN);    if(rd==0&&rn<0) return -1;    else return rd;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -