/*TCP-echoサーバー 2009.11.5 Haruka Fukai*/ #include #include #include #include int main(int argc, char *argv[]){ struct addrinfo hint={AI_PASSIVE,AF_INET6,SOCK_STREAM,0,0,NULL,NULL,NULL}; socklen_t peerlen; struct addrinfo *ai,*res; struct sockaddr_in6 peer; int ret; int sock_fd,accept_fd; int client_addrlen; int readlen; struct sockaddr_in server,client; ret = getaddrinfo(NULL,"8115",&hint,&res); if(ret!=0){ perror("getaddrinfo"); exit(0); } ai = res; /////socket///// sock_fd=socket(ai->ai_family,ai->ai_socktype,ai->ai_protocol); if(sock_fd<0){ perror("socket"); exit(0); } /////bind///// ret=bind(sock_fd,ai->ai_addr,ai->ai_addrlen); if(ret<0){ perror("bind"); exit(0); } /////listen///// ret=listen(sock_fd,5); if(ret<0){ perror("listen"); exit(0); } memset((void *)&client,0,sizeof(client)); client_addrlen=sizeof(client); /////accept///// accept_fd=accept(sock_fd,(struct sockaddr *)&client,(socklen_t *)&client_addrlen); if(accept_fd<0){ perror("accept"); exit(0); } while(1){ char buf[128]; int readlen; int sendlen; char addrbuf[128]; memset(buf,0,sizeof(buf)); peerlen = sizeof(peer); readlen=recvfrom(accept_fd,buf,sizeof(buf),0,(struct sockaddr*)&peer,&peerlen); sendlen=sendto(accept_fd,buf,readlen,0,(struct sockaddr*)&peer,sizeof(struct sockaddr_in6)); } freeaddrinfo(res); ret=close(accept_fd); if(ret<0){ perror("close"); exit(0); } ret=close(sock_fd); if(ret<0){ perror("close"); exit(0); } return 0; }