#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>

#define PORT 8080
int main()
{
        int sfd,sock;
        struct sockaddr_in addr;
        int opt=1;
        int len=sizeof(addr);
        char buff[1024]={0};
        const char *str="hello from server";
        if((sfd=socket(AF_INET,SOCK_STREAM,0))==0)
        {
                perror("socket failed");
                exit(EXIT_FAILURE);
        }
//      setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
        addr.sin_family=AF_INET;
        addr.sin_addr.s_addr=INADDR_ANY;
        addr.sin_port=htons(PORT);
        bind(sfd,(struct sockaddr *)&addr,sizeof(addr));
        listen(sfd,3);
        printf("waiting forconnection on the port %d..\n",PORT);
        while(1)
        {
                printf("Waiting for connection....\n");
                if((sock=accept(sfd,(struct sockaddr *)&addr,(socklen_t *)&len))<0)
                {
                        perror("accept");
                        continue;
                //      break;
                }
                printf("connection accepted from %s:%d\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port));
                ssize_t valread=read(sock,buff,1024);
                if(valread<0)
                        perror("read failed");
                else if(valread ==0)
                        printf("cilent disconnected\n");
                else
                        printf("client :%s\n",buff);
                send(sock,str,strlen(str),0);
                printf("hello message sent\n");
                close(sock);
                printf("client socket closed.ready for next connection\n");
                break;
        }
        close(sfd);
        printf("server shutdown\n");
        return 0;
}

