Guest User

SCTP reciever

a guest
Aug 2nd, 2014
424
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.89 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <errno.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <netinet/sctp.h>
  9. #include <arpa/inet.h>
  10. #include <strings.h>
  11.  
  12. #define PORT 5055
  13.  
  14. int main(void)
  15. {
  16.     int sock;
  17.     int retval;
  18.  
  19.     char read_buff[1024];
  20.  
  21.     struct sockaddr_in bind_addr;
  22.     struct sctp_sndrcvinfo sinfo;
  23.     struct sctp_event_subscribe events;
  24.  
  25.     bzero(&sinfo, sizeof(sinfo));
  26.  
  27.     sock = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
  28.     if (sock == -1) {
  29.         perror("socket()");
  30.         exit(-1);
  31.     }
  32.    
  33.     bind_addr.sin_family = AF_INET;
  34.     bind_addr.sin_port = htons(PORT);
  35.     bind_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  36.     if (bind_addr.sin_addr.s_addr == INADDR_NONE) {
  37.         perror("inet_addr()");
  38.         exit(-1);
  39.     }
  40.  
  41.     retval = sctp_bindx(sock, (struct sockaddr *) &bind_addr, 1, SCTP_BINDX_ADD_ADDR);
  42.     if (retval != 0) {
  43.         perror("sctp_bindx()");
  44.         exit(-1);
  45.     }
  46.  
  47.     retval = listen(sock, 5);
  48.     if (retval != 0) {
  49.         perror("listen()");
  50.         exit(-1);
  51.     }
  52.  
  53.     events.sctp_data_io_event = 1;
  54.     if ( setsockopt(sock, IPPROTO_SCTP, SCTP_EVENTS, &events, sizeof(events)) < 0 ) {
  55.         perror("setsockopt()");
  56.         exit(-1);
  57.     }
  58.  
  59.     size_t count = 20;
  60.     int msg_flags = 0;
  61.     while(count != 0) {
  62.         retval = sctp_recvmsg(sock, (void *)read_buff, sizeof(read_buff),
  63.                            NULL, NULL, &sinfo, &msg_flags);
  64.         if (retval < 0) {
  65.             perror("sctp_recvmsg()");
  66.             exit(-1);
  67.         }
  68.  
  69.         printf("Got message! Assoc_id: 0x%X, msg: %s\n", sinfo.sinfo_assoc_id, read_buff);
  70.         if (retval == 0) {
  71.             break;
  72.         }
  73.         count--;
  74.     }
  75.  
  76.     retval = close(sock);
  77.     if (retval != 0) {
  78.         perror("close()");
  79.         exit(-1);
  80.     }
  81.  
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment