Gniazda ======= Listing 6.1: Tworzenie gniazda (str. 44):: int sockd; struct sockaddr_in my_name; /* utworzenie gniazda */ sockd = socket(PF_INET, SOCK_STREAM, 0); if (sockd == -1){ perror("Tworzenie gniazda"); exit(1); } /* nadanie nazwy */ my_name.sin_family = PF_INET; my_name.sin_addr.s_addr = INADDR_ANY; my_name.sin_port = htons(6500); status = bind(sockd, (struct sockaddr*)&my_name, sizeof(my_name)); if (status == -1){ perror("Nadanie nazwy"); exit(1); } Listing 6.2: Nawiązanie połaczenia (str. 45):: int sockd; struct sockaddr_in serv_name; /* utworzenie gniazda */ sockd = socket(AF_INET, SOCK_STREAM, 0); if (sockd == -1){ perror("Tworzenie gniazda"); exit(1); } /* nazwa serwera */ serv_name.sin_family = AF_INET; serv_name.sin_addr.s_addr = inet_addr(argv[1]); serv_name.sin_port = htons(6500); /* polaczenie z serwerem */ status= connect(sockd,(struct sockaddr*)&serv_name,sizeof(serv_name)); if (status == -1){ perror("Nawiazanie polaczenia"); exit(1); } Listing 6.3: Oczekiwanie na połaczenia (str. 47):: int sockd,sockd2; int addrlen; struct sockaddr_in peer_name; int status; /* utworzenie gniazda */ ... /* nadanie nazwy */ ... status = listen(sockd, 5); if (status == -1){ perror("Nasluchiwanie"); exit(1); } /* oczekiwanie na polaczenie */ addrlen = sizeof(peer_name); sockd2 = accept(sockd, (struct sockaddr*)&peer_name, &addrlen); if (sockd2 == -1){ perror("Akceptacja polaczenia"); exit(1); } `Listing 6.4 `_: Klient usługi *daytime* (str. 48) .. literalinclude:: daytime.c `Listing 6.5 `_: Serwer usługi *echo* z konwersją wielkości liter (str. 49) .. literalinclude:: serv_upper.c