我正在尝试运行我的服务器程序,但我一直收到此错误:
绑定时出错:地址已在使用中
int main(int argc, char *argv[]){
if (argc < 6){
printf("usage: stringSearcher <filename> <stringLength> <searchLength> <nChildren> <nThreads> <blockSize>\n");
exit(0);
}
char* fileName = argv[1];
int stringLen = atoi(argv[2]);
int searchLen = atoi(argv[3]);
nChildren = atoi(argv[4]);
if (nChildren == 0)
nChildren = 1;
int nThreads = atoi(argv[5]);
int blockSize = atoi(argv[6]);
int childNo = 0;
//Opens new socket
int sockfd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0){
perror("ERROR opening socket");
exit(0);
}
int newsockfd, portno, clilen;
struct sockaddr_in serv_addr, cli_addr;
int n;
portno = 5000;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
int opt = 1;
setsockopt(1, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
perror("ERROR on binding\n");
exit(1);
}
答案 0 :(得分:7)
setsockopt(1, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
第一个参数必须是sockfd而不是'1'
答案 1 :(得分:0)
winock开发的一个很好的工具是TCPView。 它可以很容易地看到哪个进程正在侦听哪个端口,套接字状态等