Teraz zrobimy serwer nasłuchujący na wybranym porcie (przekazywanym jako parametr przy uruchomieniu naszego programu) ewentualnych próśb o zrobienie zdjęcia.
int sockfd, newsockfd, portno, clilen;
struct sockaddr_in serv_addr, cli_addr;
Tworzymy socket:
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
perror("ERROR opening socket");
exit(1);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
W zmiennej portno zapisujemy numer portu na którym nasz serwer ma nasłuchiwać:
portno = atoi(argv[1]); //arbitralny zakres 5090 - 5099
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
Adresujemy nasz socket:
if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0)
{
perror("ERROR on binding");
exit(1);
}
I uruchamiamy nasz serwer, na wskazanym przez nas porcie bedzie sluchał próśb klientów:Liczba 5 to długość kolejki klientów oczekujących na połączenie.
listen(sockfd,5);
clilen = sizeof(cli_addr);
while (TRUE)
{
I czekamy na klienta. Jak się pojawi, accept utworzy nowy socket (newsockfd), który będzie używany do komunikacji z tym klientem:
restart:
newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr,
&clilen);
if (newsockfd < 0)
{
if (errno == EINTR) goto restart;
perror("ERROR on accept");
exit(1);
}
English