Netzwerk-Verbindung mit TCP (Header auswerten)

Post Reply
Message
Author
Gabriel Huber

Netzwerk-Verbindung mit TCP (Header auswerten)

#1 Post by Gabriel Huber »

Ich hab, zu Testzwecken, ein kleines Serverprogramm programmiert, das mit:
struct sockaddr name;
int new_sock;
int s=sizeof(name);
new_sock=accept(listener, &name, (socklen_t*)&s);
eine Verbindung eines anderen Rechners animmt. Wie kann ich jetzt, vor oder nach dem accept, mit dem Serverprogramm herausfinden welcher Rechner sich mit dem Serverprogramm verbinden will. In sockaddr name soll laut info libc ein paar Informationen stehen. Wie kann ich aber diese Informationen auswerten? In name.sa_data standen zumindestens nicht gut lesbar und nicht so ohne weiteres auswertbar. Im TCP/ip Header müssten eigentlich doch Informationen über die Source-Adresse und den Port stehen.

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: Netzwerk-Verbindung mit TCP (Header auswerten)

#2 Post by hjb »

Hi,

kürzlich selbst ausprobiert: nur im Falle eines erfolgreichen accept ist die Struktur mit Info gefüllt. Das heißt, du mußt erst accept machen, dann die IP-Adresse ansehen, und falls du keinen connect mit diesem Client machen willst, einfach den new_sock schließen.

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

Gabriel Huber

Re: Netzwerk-Verbindung mit TCP (Header auswerten)

#3 Post by Gabriel Huber »

OK, das ist schon mal ganz nützlich zu wissen, wäre jetzt auch noch ganz nützlich zu wissen wie ich die Ip-Addresse heraus krieg.

Schon mal im Voraus Danke.
Gabriel Huber

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: Netzwerk-Verbindung mit TCP (Header auswerten)

#4 Post by hjb »

Hi,

etwa so:

struct sockaddr_in addr;
socklen_t nLen = sizeof(struct sockaddr);
int s;

if ((s = accept(g_socket, (struct sockaddr *) &addr, &nLen)) < 0)
{
printf("accept() fehlgeschlagen, errno = %d", errno);
return;
}

wxString ip = inet_ntoa(addr.sin_addr);
printf("Connect von %s", (const char *) ip);

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

Post Reply