PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bind() will mal wieder nicht


Tapili
12.11.2005, 20:06
Hallo alle zusammen!

Ich probiere gerade was mit Sockets zu stande zu bringen. Ich will erstmal nur eine Verbindung mit nem IRC-Server herstellen. Das funktioniert, nur will dann bind() mir nicht gehorchen :mauer:


#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

int main(int argc, char **argv)
{
int ircsocket, check;
struct sockaddr_in hostaddr, localaddr;

if(argc < 2)
{
printf("Usage: %s serveraddress\n", *argv);
return 1;
}

ircsocket = socket(AF_INET, SOCK_STREAM, 0);
if(ircsocket < 0)
printf("can't create socket\n");
else
printf("socket: created\n");

hostaddr.sin_family = AF_INET;
hostaddr.sin_port = htons(6667);
hostaddr.sin_addr.s_addr = inet_addr("irgendne ip-adresse");

check = connect(ircsocket, (struct sockaddr*) &hostaddr, sizeof(hostaddr));
if(check < 0) {
printf("connection failed\n");
perror("error ");
}
else
printf("connected\n");

hostaddr.sin_family = AF_INET;
hostaddr.sin_port = htons(0);
hostaddr.sin_addr.s_addr = inet_addr("84.140.146.62 meine ip");

check = bind(ircsocket, (struct sockaddr*) &localaddr, sizeof(localaddr));
if(check < 0) {
printf("bind() failed\n");
perror("error ");
}
else
printf("bind() works\n");
}



bind() spuckt nur das aus:
error: Cannot assign requested address.

Danke für eure Hilfe. Sitze schon seit längerem an dieser Sache und habe immer noch keine Lösung finden.

Tapili


Felix Kaiser
12.11.2005, 21:43
bind() immer vor connect() aufrufen. Andersrum macht es wenig Sinn, da beim Verbindungsaufbau bereits IP Pakete ausgetauscht werden, die IPs also schon feststehen müssen. Wenn die IPs dann stimmen sollte es keine Probleme geben.