Erwtisi gia socket programming

Vasilis Vasaitis vvas at hal.csd.auth.gr
Fri Apr 13 01:25:01 EEST 2001


On Thu, Apr 12, 2001 at 11:09:33AM +0300, Michalis Kabrianis wrote:
> Στις Thu, 12 Apr 2001 02:23:49 +0300
> Giorgos Keramidas <keramidi at otenet.gr> έγραψε:
> 
> > > > 
> > > > Gia na eisai sigouros gia to IP pou 8a exei to local port, sto bind
> > anti
> > > > gia INADDR_ANY bazeis thn IP addr pou 8es na exei :-)
> > > 
> > > Nai bre (kai thanks) to kserw, alla i erwtisi itan POIA tha ksekinisei
> > to
> > > connect an exei dyo, kai den exw balei specific IP?
> > 
> > To IP tou interface pou exei to default route.
> 
> Ayto mou fainetai arketa pithano.... Ki an den exei kanena apo ta dyo to
> default route? An exei ena apo ta dyo to route sto diktyo ekeino gia to
> opoio milame? 
> Fantazomai oti tha paei apo kei.
> Gia na min sas talaipwrw omws allo (mia kai blepw oti genika den yparxei
> gnwsi panw sto thema alla mono gnwmi) tha to psaksw peraiterw kai tha sas
> enimerwsw gia to ti tha brw (an brw).

  Ρε συ Μιχάλη, το είπα και στο άλλο μου μήνυμα, αλλά μάλλον δεν το τόνισα
αρκετά. Απλά δεν μπορείς να ξέρεις εκ των προτέρων. Μπορεί να γίνεται η
σύνδεση σε οποιαδήποτε διεύθυνση, ανάλογα με την μορφή της αίτησης από τον
client.

  Για να σου δώσω ένα παράδειγμα, δοκίμασε το προγραμματάκι που δίνω ως
attachment. Δέχεται συνδέσεις, και το μόνο που κάνει είναι να τυπώνει την
διεύθυνση της δικής του πλευράς της σύνδεσης. Δες ένα παράδειγμα εκτέλεσης
από το δικό μου μηχάνημα (copy-paste):

mod at arakis:/var/tmp $ ./sockname &
[1] 822
mod at arakis:/var/tmp $ nc localhost 4096
127.0.0.1
mod at arakis:/var/tmp $ nc arakis 4096
192.168.24.2
mod at arakis:/var/tmp $ nc thes530-b060.otenet.gr 4096
62.103.254.60
mod at arakis:/var/tmp $ _

  Ελπίζω να βοήθησα...

-- 
Vasilis Vasaitis
vvas at hal.csd.auth.gr


-------------- next part --------------
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>

#define PORT 4096

int main(void)
{
    int listen_fd, conn_fd;
    struct sockaddr_in addr;
    socklen_t size;
    char *buf;
    
    listen_fd = socket(PF_INET, SOCK_STREAM, 0);
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    addr.sin_port = htons(PORT);
    bind(listen_fd, (struct sockaddr *) &addr, sizeof addr);
    listen(listen_fd, 5);
    
    for (;;) {			/* forever */
	conn_fd = accept(listen_fd, NULL, NULL);
	getsockname(conn_fd, (struct sockaddr *) &addr, &size);
	buf = inet_ntoa(addr.sin_addr);
	write(conn_fd, buf, strlen(buf));
	write(conn_fd, "\r\n", 2);
	close(conn_fd);
    }
    
    /* not reached */
    return 0;
}


More information about the Linux-greek-users mailing list