Bind: Address Already in Use
I'm trying to run my server program but I keep getting this error:
ERROR on binding: Address already in use
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, port开发者_如何学运维no, 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);
}
setsockopt(1, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
1st argument must be sockfd and not '1'
an excellent tool for winsock development is TCPView. it makes it simple to see which process is listening on which port, socket status, etc.
精彩评论