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

#define	SERVER	"sock_s"

int	fd = -1;

void terminate(int rc)
{
  if(fd >= 0){
    shutdown(fd, 2);
    close(fd);
  }
  exit(rc);
}

int main()
{
  int	rc, len;
  struct sockaddr_un	unix_addr;
  char	buf[256];

  signal(SIGINT, terminate);
  signal(SIGTERM, terminate);

  /* ソケットを作る	*/
  fd = socket(AF_UNIX, SOCK_STREAM, 0);
  if(fd < 0){
    printf("client:socket error.\n");
    terminate(rc);
  }
  printf("client:socket.\n");

  /* SERVERにconnect	*/
  unix_addr.sun_family = AF_UNIX;
  strcpy(unix_addr.sun_path, SERVER);
  len = sizeof(unix_addr.sun_family)+strlen(unix_addr.sun_path);
  rc = connect(fd, (struct sockaddr*)&unix_addr, len);
  if(rc < 0){
    printf("client:connect error.\n");
    terminate(rc);
  }
  printf("client:connect.\n");

  /* 1秒毎に	*/
  for(;;){
    sleep(1);
    /* connectしたソケットに送信	*/
    strcpy(buf, "from client");
    rc = send(fd, buf, strlen(buf)+1, 0);
    if(rc < 0){
      printf("client:send error.\n");
      terminate(rc);
    }
    printf("client:send.\n");
  }

  terminate(0);

  return 0;
}
