🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: at.fido.linux
Article #2011

Re: noch was zu Internet-Vernetzung

#2011
From: christian mock
Date: Sun, 07 Jan 1996 00:00
80 lines
3169 bytes
In article <4cmmsp$1pe@mondbasis.site8.ping.at>,
Franz Schaefer <schaefer@ping.at> wrote:

> also, wie der richard schon erklaert hast du brauchst eine applikation
> firewall (z.b. ich glaube TIS) im gegensatz zu einem besseren packet filter

relativ empfehlenswert, vor allem wenn man des oefteren die selben
seiten abgrast, ist fuer http gleich die installation eines cern
3.0-httpd als caching proxy -- spart mir zb. beim regelmaessigen laden
der ping homepage eine menge zeit.


ein paar anmerkungen zum code (von einem, der vor 1 1/2 jahren
kopfueber in die materie springen musste :-)

>   /*
>   ** Parse the command line arguments
>   */
>   args=0;
>   for (i = 1; i < argc ; i++) {
>     if (argv[i][0] == '-') {

getopt(3) verwenden...

>   if ((s=socket(AF_INET,SOCK_STREAM,6)) <0 ) {

nicht, dass sich irgendwer trauen wuerde, das tcp-protokoll neu zu
numerieren, aber 'getprotobyname("tcp")' ist sicherer als '6'...

>     syslog(LOG_ERR,"sproxy: socket");

bei syslog-messages ist es sehr nett, auch den fehlercode/errno
auszugeben -- %m steht dafuer...

>   if (connect(s, (struct sockaddr *)&sout, sizeof(sout)) < 0) {
>      syslog(LOG_ERR,"sproxy: connect");
>      exit(1);
>   }

hier waere es schoener und sicherer, alle von gethostbyname(3)
zurueckgegebenen adressen durchzuprobieren -- manche hosts sind halt
multi-homed... 

>     FD_ZERO(&efdset);

du sagst, dein programm bleibt hie und da einfach haengen, obwohl es
nicht sollte -- moeglicherweise solltest du die descriptoren im
exception set auch ueberpruefen.

>     timeout.tv_sec=1000000000L;

die linux-manpage sagt dazu nix (wie die 2er und 3er linux-manpages,
im gegensatz zu denen von zb. SunOS, ueberhaupt relativ wenig
hergeben), aber du kannst anstatt dem timeout auch einen NULL-pointer
uebergeben, das steht fuer ein unendliches timeout.

>     if (FD_ISSET(s,&fd_read)) {
>       outbufcnt=read(s,outbuf,sizeof(outbuf)-1);
>       if (outbufcnt <= 0) done=1;
>     }

hier schlummert moeglicherweise ein kleines risiko -- ich wuerde noch
auf EINTR (interrupted system call) ueberpruefen... die SunOS-manpage
sagt, dass der read-syscall automatisch restarted wird, falls noch
keine daten gelesen wurden, die linux-manpage sagt dazu nix aus, also
koennte es passieren, dass errno == EINTR, und das program steigt aus.

>     if (FD_ISSET(s,&fd_write)) {
>       inbytes=write(s,inbuf,inbufcnt);
>       if (inbytes > 0) inbufcnt=0;
>       else             done=1; 
>     }

...genauso garantiert dir niemand, dass wirklich alle daten
geschrieben werden koennen, weswegen zur voelligen sicherheit inbufcnt
um inbytes dekrementiert gehoerte, etc.

ciao,

cm.
Technical Details
Message-ID: <4cpfoj$5r7@kukuruz.ping.at>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <MSGID_2=3A310=2F81.81_0ed326d3@fidonet> <4cmmsp$1pe@mondbasis.site8.ping.at>

Show Full Headers
Complete Article Headers
X-Google-Language: GERMAN,ASCII-7-bit
X-Google-Thread: 109314,29d5ea01d82b8910,start
X-Google-Attributes: gid109314,public
From: cm@kukuruz.ping.at (christian mock)
Subject: Re: noch was zu Internet-Vernetzung
Date: 1996/01/07
Message-ID: <4cpfoj$5r7@kukuruz.ping.at>
X-Deja-AN: 134293660
references: <MSGID_2=3A310=2F81.81_0ed326d3@fidonet> <4cmmsp$1pe@mondbasis.site8.ping.at>
organization: private
newsgroups: at.fido.linux