[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]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] bind()




"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




 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. 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] *