Erreur de liaison (99): Ne peut pas attribuer une adresse demandée
Je suis en train d'essayer d'obtenir le morceau suivant du code de travail, mais la réception de l'erreur ci-dessus. Je suis raisonnablement sûr que l'adresse que j'suis en train de monter dans est correct, car il travaille dans un programme distinct qui est en train de faire une tâche similaire. Ce qui m'amène à croire que je fais une sorte de stupide erreur, toute aide serait appréciée!
/*Create TCP socket*/
int tcp_socket(void)
{
int s;
while((s = socket(PF_INET,SOCK_STREAM,0))==-1 && errno == EINTR){
continue;
}
return s;
}
/*Bind tcp*/
int tcp_bind(int s, char *server, uint16_t port)
{
int rv;
struct sockaddr_in sin;
struct hostent *host_addr;
assert(s >= 0);
host_addr = gethostbyname(server);
if (!host_addr) {
perror("gethostbyname(server)");
return -1;
}
memset(&sin, '\0', sizeof sin);
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr = *((struct in_addr *)host_addr->h_addr);
while((rv = bind(s,(struct sockaddr *)&sin, sizeof sin)) == -1
&& errno == EINTR) {
continue;
}
return (rv == 0) ? 0 : errno;
}
int connect_to_server()
{
int rv;
int socket = tcp_socket();
_logf(LOG_DEBUG, "LOG %s:%d (%s) - %s:%d", __FILE__, __LINE__, __func__, "Socket created:", socket);
rv = tcp_bind(socket,options.server_p, options.dest_port);
if(rv != 0) {
_logf(LOG_ALERT, "LOG %s:%d (%s) - %s:%s", __FILE__, __LINE__, __func__, "tcp_bind failed, error", strerror(rv));
return -1;
}
else {
_logf(LOG_ALERT, "LOG %s (%s) - %s:%d", __FILE__, __LINE__, __func__, "TCP bind success");
}
}
int main(int argc, char **argv)
{
if (sysconf() == -1) {
exit(-1);
}
sysinit();
if (parse_options(argc, argv) == -1) {
usage();
exit(1);
}
connect_to_server();
}
Message d'erreur:
Sep 10 10:59:21 michael-VirtualBox mld: LOG mld.c:685 (connect_to_server) - tcp_bind failed, error:Cannot assign requested address
OriginalL'auteur TomSelleck | 2013-09-10
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez lier un socket à une adresse d'un local interface.
Je n'arrivais pas à réaliser que j'ai été de tenter de se lier à une distance de port, merci!
Alors que tproxy pris en charge, vous ne pouvez vraiment se lier à une adresse distante.
S'avère être le cas pour le protocole UDP (SOCK_DGRAM) également. Un million de mercis!
OriginalL'auteur alk