#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>

void blad()
{
  perror("Blad klienta.");
  exit(1);
}

int main()
{
  int gniazdo_klienta;
  int serwer_dlugosc;
  int klient_dlugosc;
  char znak='a';
  int test1,test2;
  struct sockaddr_un adres_serwera;
  struct sockaddr_un adres_klienta;

  //Usuniecie starego gniazda klienta
  unlink("gniazdo_klienta");

  //Utworzenie gniazda klienta
  test1=gniazdo_klienta=socket(AF_UNIX, SOCK_DGRAM,0);
  if (test1==-1) blad();

  //Zwiazanie gniazda klienta z adresem
  adres_klienta.sun_family=AF_UNIX;
  strcpy(adres_klienta.sun_path,"gniazdo_klienta");
  klient_dlugosc=sizeof(adres_klienta); 
  test2=bind(gniazdo_klienta,(struct sockaddr *)&adres_klienta,klient_dlugosc);
  if (test2==-1) blad();

  //Ustalenie adresu serwera
  adres_serwera.sun_family=AF_UNIX;
  strcpy(adres_serwera.sun_path,"gniazdo_serwera");
  serwer_dlugosc=sizeof(adres_serwera); 
  
  //Klient wysyla wiadomosc do serwera
  sendto(gniazdo_klienta,&znak,1,0,(struct sockaddr *)&adres_serwera,serwer_dlugosc);
  printf("Wyslalem do serwera znak %c.\n",znak);

  //Klient odbiera od serwera zmodyfikowana wiadomosc
  recvfrom(gniazdo_klienta,&znak,1,0,(struct sockaddr *)&adres_serwera,&serwer_dlugosc);
  printf("Otrzymalem od serwera znak %c.\n",znak);

  close(gniazdo_klienta);  
  exit(0);
}


