[an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive] (none)
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive] (none)
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
"Erwin S. Andreasen" wrote:
> On Wed, 26 Jan 2000, Frederik Treue wrote:
>
> Andre har sagt at du ikke har angivet størrelse på din buffer. Her er
> nogle andre diverse kommentarer.
>
> > if (sock_fd==-1) // error check
> > {
> > cerr << "listen socket allocation error : " << endl;
> > cerr << strerror(errno) << endl;
> > exit(1);
> > }
>
> Generelt ville jeg anbefale dig at lave en generel fatal-fejl rutine som
> printer noget ud (give den en vararg liste som sprintf) og ellers exit'er.
>
> Det gør din kode noget mere overskueligt, fx:
>
> if ((sock_fd = socket(...)) < 0)
> fatal_error("listen: %m");
>
> "%m" er en GNU-extension som svarer til %s og en strerror(errno)
> automatisk overført. Altså kræver den GNU libc. Hvis du ikke vil bruge det
> af hensyn til portabilitet kunne du fx checke om det sidste tegn i
> strengen der overføres er ":" og derefter udskrive strerror(errno).
>
> fatal_error bruger så va_list, va_start og vfprintf(stderr, "....").
>
> > bzero(&(my_addr.sin_zero), 8);
>
> Du bør bruge sizeof her -- at bruge magiske tal sådan gør programmet
> sværere at vedligholde.
>
> ``Though a program be but three lines long, someday it will have to be maintained.''
>
> (Tao of Programming ;) )
>
> > // attempt to recv() incoming signal
> > bytes_recv = recv(new_fd, buf, len, 0);
>
> Hvis du ikke kan har brug for de ekstra flag som recv() giver mulighed
> for, kan du bruge read().
>
> > // end the received signal
> > *(buf+bytes_recv) = '\0';
>
> Her kunne recv() returnere < 0 ved fejl, det bør du checke for.
>
> > // make connection to detination, using defined socket
> > connect(sockfd, (struct sockaddr *) &dest_addr, sizeof(sockaddr));
> > if (errno) // error check
>
> Du skal checke resultatet af "connect" her, ikke bare checke errno! Du har
> ikke garanti at errno er sat til 0 når det sidste kald lykkedes: du kan
> kun stole på errno når
>
> > len = strlen(msg); // find length of message to be send()
> > bytes_sent = send(sockfd, msg, len, 0); // attempt to send the message
>
> Når du skriver X bytes til en socket har du desværre ikke garanti for at
> de alle X bliver skrevet. Det er en god chance for det hvis du fx skrive
> 250 bytes og når den nu er localhost det drejer sig om, men skriver du fx
> 4k kan det være at kernen kun sender 2k af dem og så returnerer 2049 til
> dig -- og du må selv holde styr på hvor langt du er kommet.
>
> For at være sikker her kunne du fx lave din again "bwrite" rutine som
> bliver ved med at sende indtil den har fået sendt det hele afsted.
>
> --
> ==============================================================================
> Erwin Andreasen Herlev, Denmark <sslug@sslug> UNIX System Programmer
> <URL:http://www.andreasen.org> <*> (not speaking for) DDE
> ==============================================================================
Ja, der er en del at lære, men jeg er som sagt først lige gået igang med
netprogramering.
Tak for hjælpen (også til de andre)
Regards
Frederik Treue
Last modified
2005-08-10, 20:08 CEST
[an error occurred while processing this directive] This page is maintained by
[an error occurred while processing this directive]MHonArc
[an error occurred while processing this directive] #
[an error occurred while processing this directive] *