tcp_tools.c

来自「sco unix下socket接收发送串函数」· C语言 代码 · 共 94 行

C
94
字号
#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 + =
减小字号Ctrl + -
显示快捷键?