#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
void fail( char* str ) {
perror( str );
exit( EXIT_FAILURE );
}
int main( void ) {
#define bsize 8192
char buff[ bsize ];
struct sockaddr_in6 sin6;
memset( &sin6, 0, sizeof( sin6 ) );
sin6.sin6_port = htons( 10000 );
sin6.sin6_family = AF_INET6;
sin6.sin6_addr = in6addr_any;
int sockfd = socket( AF_INET6, SOCK_STREAM, 0 );
if( sockfd < 0 ) fail( "sockfail" );
if( bind( sockfd, ( struct sockaddr* ) &sin6, sizeof( sin6 ) ) < 0 )
fail( "bindfail" );
if( listen( sockfd, 5 ) < 0 ) fail( "listenfail" );
puts( "Starting to accept sockets" );
int connfd = accept( sockfd, NULL, NULL );
if( connfd < 0 ) fail( "acceptfail" );
close( sockfd );
for(;;) {
memset( buff, 0, bsize );
if( read( connfd, buff, bsize - 1 ) < 0 ) fail( "readfail" );
puts( buff );
}
return 0;
}