📄 tcp_tools.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 + -