example/sctp-client.cc
author Hajime Tazaki <tazaki@sfc.wide.ad.jp>
Mon, 21 Nov 2016 16:01:12 +0900
changeset 772 274220a5a949
parent 544 9952fad1036b
permissions -rw-r--r--
follow up fix for waf-1.8 upgrade
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
544
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
     1
// 
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
     2
// libstcp1-dev is needed
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
     3
// 
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
     4
#include <stdio.h>
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
     5
#include <stdlib.h>
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
     6
#include <string.h>        /* for memset */
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
     7
#include <unistd.h>        /* for memset */
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
     8
#include <sys/socket.h>
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
     9
#include <sys/types.h>
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    10
#include <arpa/inet.h>
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    11
#include <netinet/in.h>
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    12
#include <netinet/sctp.h>
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    13
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    14
int
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    15
main (int argc, char **argv)
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    16
{
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    17
  int connect_sock, stat, port, slen, i, flags;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    18
  struct sctp_initmsg initmsg;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    19
  struct sockaddr_in server_addr;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    20
  struct sctp_event_subscribe s_events;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    21
  struct sctp_status s_status;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    22
  struct sctp_sndrcvinfo s_sndrcvinfo;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    23
  char buffer[1024];
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    24
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    25
  port = 3007;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    26
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    27
  connect_sock = socket (AF_INET, SOCK_STREAM, IPPROTO_SCTP);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    28
  memset (&initmsg, 0, sizeof (initmsg));
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    29
  initmsg.sinit_num_ostreams = 3;          // Number of Output Stream
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    30
  initmsg.sinit_max_instreams = 3;      // Number of Input Stream
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    31
  initmsg.sinit_max_attempts = 4;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    32
  stat = setsockopt (connect_sock, IPPROTO_SCTP, SCTP_INITMSG,
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    33
                     &initmsg, sizeof (initmsg) );
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    34
  if (stat < 0)
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    35
    {
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    36
      perror ("setsockopt error");
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    37
      exit (-1);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    38
    }
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    39
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    40
  memset (&server_addr, 0, sizeof (server_addr));
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    41
  server_addr.sin_family = AF_INET;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    42
  server_addr.sin_port = htons (port);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    43
  server_addr.sin_addr.s_addr = inet_addr (argv[1]);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    44
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    45
  stat = connect (connect_sock, (struct sockaddr *)&server_addr, 
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    46
                  sizeof (server_addr) );
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    47
  if (stat < 0)
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    48
    {
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    49
      perror ("connect error");
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    50
      exit (-1);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    51
    }
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    52
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    53
  memset (&s_events, 0, sizeof (s_events));
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    54
  s_events.sctp_data_io_event = 1;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    55
  stat = setsockopt (connect_sock, SOL_SCTP, SCTP_EVENTS,
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    56
                     (const void *)&s_events, sizeof (s_events));
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    57
  if (stat < 0)
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    58
    {
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    59
      perror ("event error");
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    60
      exit (-1);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    61
    }
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    62
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    63
  slen = sizeof (s_status);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    64
  stat = getsockopt (connect_sock, SOL_SCTP, SCTP_STATUS,
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    65
                     (void *)&s_status, (socklen_t *)&slen);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    66
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    67
  printf ("assoc id  = %d\n", s_status.sstat_assoc_id );
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    68
  printf ("state     = %d\n", s_status.sstat_state );
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    69
  printf ("instrms   = %d\n", s_status.sstat_instrms );
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    70
  printf ("outstrms  = %d\n", s_status.sstat_outstrms );
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    71
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    72
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    73
  for (i = 0 ; i < 100 ; i++)
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    74
    {
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    75
      stat = sctp_recvmsg (connect_sock, (void *)buffer, sizeof (buffer),
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    76
                           (struct sockaddr *)NULL, 0, &s_sndrcvinfo, &flags);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    77
      printf ("stat = %d\n", stat);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    78
      if (stat > 0)
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    79
        {
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    80
          buffer[stat] = 0;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    81
          printf ("(Stream %d) %s\n", s_sndrcvinfo.sinfo_stream, buffer);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    82
        }
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    83
    }
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    84
  /* Close our socket and exit */
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    85
  close (connect_sock);
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    86
  return 0;
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    87
}
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    88
9952fad1036b Bug 1827 - Linux SCTP support over DCE
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
diff changeset
    89