1 /* This is based on /src/tools/test/stress2/misc/sctp.sh
2 * but it uses fork and the server exits rather than
3 * loops indefinitely */
6 #include <sys/socket.h>
10 #include <netinet/in.h>
11 #include <netinet/sctp.h>
16 static int my_port_num
= 62324;
28 struct sctp_sndrcvinfo sndrcvinfo
;
29 struct sockaddr_in servaddr
= {
30 .sin_family
= AF_INET
,
31 .sin_addr
.s_addr
= htonl(INADDR_ANY
),
32 .sin_port
= htons(my_port_num
),
34 struct sctp_initmsg initmsg
= {
35 .sinit_num_ostreams
= 5,
36 .sinit_max_instreams
= 5,
37 .sinit_max_attempts
= 4,
39 int listen_fd
, conn_fd
, flags
, ret
, in
;
41 listen_fd
= socket(AF_INET
, SOCK_STREAM
, IPPROTO_SCTP
);
45 ret
= bind(listen_fd
, (struct sockaddr
*) &servaddr
, sizeof(servaddr
));
49 ret
= setsockopt(listen_fd
, IPPROTO_SCTP
, SCTP_INITMSG
, &initmsg
,
54 ret
= listen(listen_fd
, initmsg
.sinit_max_instreams
);
60 printf("Waiting for connection\n");
63 conn_fd
= accept(listen_fd
, (struct sockaddr
*) NULL
, NULL
);
67 printf("New client connected\n");
70 /* Note that flags is uninitialized here */
71 in
= sctp_recvmsg(conn_fd
, buffer
, sizeof(buffer
), NULL
, 0,
74 printf("Received data: %s\n", buffer
);
84 struct sockaddr_in servaddr
= {
85 .sin_family
= AF_INET
,
86 .sin_port
= htons(my_port_num
),
87 .sin_addr
.s_addr
= inet_addr("127.0.0.1"),
90 const char *msg
= "Hello, Server!";
92 conn_fd
= socket(AF_INET
, SOCK_STREAM
, IPPROTO_SCTP
);
96 ret
= connect(conn_fd
, (struct sockaddr
*) &servaddr
, sizeof(servaddr
));
100 ret
= sctp_sendmsg(conn_fd
, (void *) msg
, strlen(msg
) + 1, NULL
, 0, 0, 0, 0, 0, 0 );
108 main(int argc __unused
, char *argv
[])