绑定:无法分配请求的地址

编程入门 行业动态 更新时间:2024-10-28 10:34:11
本文介绍了绑定:无法分配请求的地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

可能重复: 无法分配请求的地址-可能的原因?

Possible Duplicate: Cannot assign requested address - possible causes?

#include <sys/types.h> #include <sys/socket.h> #include <sys/wait.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <netdb.h> #include <time.h> #include <string.h> #ifdef STRERROR extern char *sys_errlist[]; extern int sys_nerr; char *undef = "Undefined error"; char *strerror(error) int error; { if (error > sys_nerr) return undef; return sys_errlist[error]; } #endif #define CIAO_PS "bfi_2" main(argc, argv) int argc; char **argv; { int lsock, csock, osock; FILE *cfile; char buf[4096]; struct sockaddr_in laddr, caddr, oaddr; int caddrlen = sizeof(caddr); fd_set fdsr, fdse; struct hostent *h; struct servent *s; int nbyt; unsigned long a; unsigned short oport; int i, j, argvlen; char *bfiargv[argc+1]; char *fintops = CIAO_PS ; if( argc < 4 ) { fprintf(stderr,"Usage: %s localport remoteport remotehost fakeps\n",argv[0]); return 30; } for( i = 0; i < argc; i++ ) { bfiargv[i] = malloc(strlen(argv[i]) + 1); strncpy(bfiargv[i], argv[i], strlen(argv[i]) + 1); } bfiargv[argc] = NULL; argvlen = strlen(argv[0]); if( argvlen < strlen(CIAO_PS) ) { printf("Se vuoi fregare davvero ps vedi di lanciarmi almeno come superFunkyDataPipe !\n") ; abort(); } if(bfiargv[4]) fintops=bfiargv[4] ; strncpy(argv[0], fintops, strlen(fintops)); for( i = strlen(fintops); i < argvlen; i++ ) argv[0][i] = '\0'; for( i = 1; i < argc; i++ ) { argvlen = strlen(argv[i]); for(j=0; j <= argvlen; j++) argv[i][j] = '\0'; } a = inet_addr(argv[3]); if( !(h = gethostbyname(bfiargv[3])) && !(h = gethostbyaddr(&a, 4, AF_INET)) ) { perror(bfiargv[3]); return 25; } oport = atol(bfiargv[2]); laddr.sin_port = htons((unsigned short)(atol(bfiargv[1]))); if( (lsock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1 ) { perror("socket"); return 20; } laddr.sin_family = htons(AF_INET); // laddr.sin_addr.s_addr = htonl(0); laddr.sin_addr.s_addr = inet_addr("IP OF THE PROXY"); if( bind(lsock, &laddr, sizeof(laddr)) ) { perror("bind"); return 20; } if( listen(lsock, 1) ) { perror("listen"); return 20; } if( (nbyt = fork()) == -1 ) { perror("fork"); return 20; } if (nbyt > 0) return 0; setsid(); while( (csock = accept(lsock, &caddr, &caddrlen)) != -1 ) { cfile = fdopen(csock,"r+"); if( (nbyt = fork()) == -1 ) { fprintf(cfile, "500 fork: %s\n", strerror(errno)); shutdown(csock,2); fclose(cfile); continue; } if (nbyt == 0) goto gotsock; fclose(cfile); while (waitpid(-1, NULL, WNOHANG) > 0); } return 20; gotsock: if( (osock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1 ) { fprintf(cfile, "500 socket: %s\n", strerror(errno)); goto quit1; } oaddr.sin_family = h->h_addrtype; oaddr.sin_port = htons(oport); memcpy(&oaddr.sin_addr, h->h_addr, h->h_length); if( connect(osock, &oaddr, sizeof(oaddr)) ) { fprintf(cfile, "500 connect: %s\n", strerror(errno)); goto quit1; } while( 1 ) { FD_ZERO(&fdsr); FD_ZERO(&fdse); FD_SET(csock,&fdsr); FD_SET(csock,&fdse); FD_SET(osock,&fdsr); FD_SET(osock,&fdse); if( select(20, &fdsr, NULL, &fdse, NULL) == -1 ) { fprintf(cfile, "500 select: %s\n", strerror(errno)); goto quit2; } if( FD_ISSET(csock,&fdsr) || FD_ISSET(csock,&fdse) ) { if ((nbyt = read(csock,buf,4096)) <= 0) goto quit2; if ((write(osock,buf,nbyt)) <= 0) goto quit2; } else if( FD_ISSET(osock,&fdsr) || FD_ISSET(osock,&fdse) ) { if ((nbyt = read(osock,buf,4096)) <= 0) goto quit2; if ((write(csock,buf,nbyt)) <= 0) goto quit2; } } quit2: shutdown(osock,2); close(osock); quit1: fflush(cfile); shutdown(csock,2); quit0: fclose(cfile); return 0; }

我出于某种原因想知道我是否进行了编译,而当我运行它时,我总是会遇到这个错误

I was wondering for some reason I did compile it and when I run it I always end up having this error

./proxyapp 5121 5121我的真实服务器PChar的IP 绑定:无法分配请求的地址

./proxyapp 5121 5121 IP OF MY REAL SERVER PChar bind: Cannot assign requested address

它应该将3个端口重定向到具有相同端口的特定代理ip.

It should be redirecting 3 ports to the certain proxy ip with the same ports.

请帮助

推荐答案

端口5121已被使用.再试一次,如果只是程序先前运行的结果,则设置SO_REUSEADDR.

Port 5121 is already in use. Try another, or set SO_REUSEADDR if it's just an artefact of a previous run of your program.

注意,您需要关闭插座,而不仅仅是关闭插座.

NB you need to close sockets, not just shut them down.

更多推荐

绑定:无法分配请求的地址

本文发布于:2023-10-24 08:18:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1523421.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:绑定   分配   地址

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!