TEST_F(TrackerTest, runTCP) { t->_run = false; EXPECT_CALL(mockSocketTCP, attach()) .Times(1); EXPECT_CALL(mockSocketTCP, beginListen(1)) .Times(1); t->runTCP(); Mock::VerifyAndClearExpectations(&mockSocketTCP); t->_run = true; Client * c1 = new Client(&mockSocketTCP); Client * c2 = new Client(&mockSocketTCP); EXPECT_CALL(mockSocketTCP, attach()) .Times(1); EXPECT_CALL(mockSocketTCP, beginListen(1)) .Times(1); EXPECT_CALL(mockSocketTCP, recvMsg(_)) .WillOnce(Return(c1)) .WillOnce(Return(c2)) .WillOnce(Invoke(this,&TrackerTest::exitRunning)); t->runTCP(); EXPECT_EQ(t->_newClient.size(), 2); }
int main(int argc, char *argv[]) { //variables int sockfd,newsockfd,portno,pid; socklen_t clilen; struct sockaddr_in serv_addr, cli_addr; if (argc < 2) { fprintf(stderr,"ERR: write the port number\n"); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { fprintf(stderr,"ERR: socket cannot be opened"); exit(1); } bzero((char *) &serv_addr, sizeof(serv_addr)); portno = atoi(argv[1]); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0){ fprintf(stderr,"ERR: cannot bind"); exit(1); } listen(sockfd,20); //allowed 20 process clilen = sizeof(cli_addr); while (true) { newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0){ fprintf(stderr,"ERR: cannot accept"); } pid = fork(); if (pid < 0){ fprintf(stderr,"ERR: cannot fork"); exit(-1); } if (pid == 0) { //child close(sockfd); beginListen(newsockfd); exit(0); } //Parent else { close(newsockfd); } } close(sockfd); return 0; /* we never get here */ }