Newsgroup: it.comp.lang.c++
Titolo: Le socket

Hi, sto smanettando un pò con le socket su Linux in vista del lavoro con
la tesi, in rete ho trovato questo semplice esempio:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
void serve_request (struct sockaddr_in *cname, int *clen, int csock)
{
   char message[255];
   char car={  0  };
   getpeername ( &csock,(struct sockaddr *) cname, *clen);
   printf("Richiesta di servizio da parte di :
&s",inet_ntoa((*cname).sin_addr));
   strcpy(message,"Questo è un test : 01234567890 ");
   write(csock,message,strlen(message));
   while (car!='^')
   {
      read (csock,&car,1);
      write(csock,&car,1);
   }
   close(csock);
}
main()
{
   int c,s;
   struct sockaddr_in sname;
   s=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
   sname.sin_family=AF_INET;
   sname.sin_port=htons(5555);
   sname.sin_addr.s_addr=htonl(INADDR_ANY);
   bind(s,(struct sockaddr *) &sname, sizeof(sname));
   listen (s,5);
   while (1)
   {
      struct sockaddr_in client = {  0  } ;
      int client_len = sizeof (client);
      memset (&client,0,sizeof(client));
      c=accept(s,(struct sockaddr *) &client, &client_len);
      if (c != -1)
      {
	 serve_request (&client,&client_len,c);
      }
   }
}
 
In pratica implementa un server che si limita a mandare un eco dei
caratteri che gli arrivano, ho però un problemino, nella funzione
serve_request c'è un printf che dovrebbe stampare l'indirizzo dell'host
che chiama (io mi connetto da un'altra console con telnet), però tale
output non viene visualizzato, dove va a finire??
Un'altra cosa, mi sapete indicare un buon manuale/guida sulla
programmazione con le socket che si possa scaricare dalla rete, o magari
anche un buon libro ???
-- 
  _  _                   _     | "L'universo altro non è che un  
 | \| |___ _____ ___ ___|_|___ |  foruncolo del Divenire che si sta
 | .` | -_|     | -_|_ -| |_ -||  stemperando nel mare dell'Essere
 |_|\_|___|_|_|_|___|___|_|___||  ovvero nel Nulla"

magari mi sbaglio..ma prova ad inserire \n alla fine della stringa stampata
con la printf.
--
---
Alessandro >>CoMiX<< Cominu
e-mail: 
aco...@tiscalinet.it
Icq: 116354077
Registered user at 
http://counter.li.org
 # 203765

 anche un buon libro ???
prova a chiedere su it.comp.os.linux.development
--
  Jerle Shannara
Per rispondere in email togli NO e SPAM
homepage 
http://utenti.tripod.it/jerleshannara

prova a chiedere su it.comp.os.linux.development
Già fatto (sto invadendo tutti i ng di programmazione ;) )


con la printf.
Niente nemmeno cosě va :/
-- 
  _  _                   _     | "L'universo altro non č che un  


 invece nulla.
Uhm... strano; a 'sto punto mi viene da dubitare che la funzione venga
effettivemente chiamata. Hai provato con un debugger a vedere se "entri"
all'interno della funzione serve_request?


all'interno della funzione serve_request?
Si certo, alla funzione ci arriva e apparentemente la esegue perň a
schermo non appare niente, boh?
-- 
  _  _                   _     | "L'universo altro non č che un  


 ha scritto nel messaggio
news:7e1lltc0iq31otnnn...@4ax.com...
Non so che dirti... ho provato pure a compilarlo ma ottengo una lunga sfilza
di errori:
socket.cpp: In function `void serve_request (sockaddr_in *, int *, int)':
socket.cpp:12: cannot convert `int *' to `int' for argument `1' to
`getpeername (int, sockaddr *, socklen_t *)'
socket.cpp:13: `inet_ntoa' undeclared (first use this function)
socket.cpp:13: (Each undeclared identifier is reported only once for each
function it appears in.)
socket.cpp:15: `write' undeclared (first use this function)
socket.cpp:18: `read' undeclared (first use this function)
socket.cpp:21: `close' undeclared (first use this function)
socket.cpp: At top level:
socket.cpp:25: warning: ISO C++ forbids declaration of `main' with no type
socket.cpp: In function `int main ()':
socket.cpp:39: cannot convert `int *' to `socklen_t *' for argument `3' to
`accept (int, sockaddr *, socklen_t *)'
gmake: *** [socket.o] Error 1
*** failed ***
(compilato ovviamente sotto Linux Mandrake 8 e KDev 1.qualche.cosa :-)).
Oltre agli errori facilmente correggibili ce ne sono altri (come chiamate a
funzioni non dichiarate) a cui non posso rimediare. Ma dove cavolo hai
trovato 'sto schifo di codice? :PP


 ha scritto nel messaggio

Uhm secondo me tu non hai incluso tutte le librerie, o forse il problema
potrebbe essere che in realtà quello è codice C, ma in realtà questo non
dovrebbe essere un problema (o sbaglio?), cmq io riesco benissimo a
compilarlo ricevo solo due warning in relazione agli argomenti di
getpeername, che però sono trascurabili, sei tu l'incapace :PPPP
Cmq direi di chiuderla qui visto che mi sono reso conto di essere anche
leggermene OT [1] ^___^;;;
[1] O forse no???
-- 
  _  _                   _     | "L'universo altro non è che un  


 [1] O forse no???
Sì siamo OT; se vuoi però puoi contattarmi in email.


Sì siamo OT; se vuoi però puoi contattarmi in email.
Uh e che vuoi da me sciocchino ;)
A parte gli scherzi grazie per il tempo perso, ma al momento ho lasciato
perdere e mi sono rimesso a studiare le socket da un punto di vista
teorica, se però avrò bisogno...


 anche un buon libro ???
Anche se non e` il posto giusto mi permetto di rispondere.
Ho lavorato parecchio sui socket (li preferisco maschili...) e un 
grandissimo libro che non solo ti spiega come destreggiarti direttamente 
con essi, ma ti insegna anche parecchie cose correlate ed utilissime e`:
Sean Walton - Linux Socket Programming - SAMS editore

Sean Walton - Linux Socket Programming - SAMS editore
Grazie :)
