#include #include #include #define BS 4096 int main(int argc,char *argv[]) { int s; struct sockaddr_in name; char *tmp; char chunk[BS]; int off=0; char buf[BS]; int len=sizeof(struct sockaddr_in); if(argc < 3) { printf("usage: urcdump serv port\n"); return -2; } s=socket(PF_INET,SOCK_STREAM,6); memset(&name,0,len); name.sin_family=AF_INET; name.sin_addr.s_addr=inet_addr(argv[1]); name.sin_port=htons(atoi(argv[2])); setlinebuf(stdout); if(connect(s,(struct sockaddr *)&name,len) == -1) return -1; while((len=read(s,buf,BS-1)) > 0) { memcpy(chunk+off,buf,len); off+=len; if(off > 26) { if((tmp=memchr(chunk+26,'\n',off-26))) { tmp++; write(1,chunk+26,tmp-chunk-26); memmove(chunk,tmp,tmp-chunk+1); off-=(tmp-chunk); } } } }