Title
Author
Link http://thunked.org/p/view/pub/
Created 2012-07-09 00:17:45
Expires never
Filename simple server
Language C
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "handy.h";

#define PORT 7890 //default connect PORT
#define BUFFER_LEN 1024;

int main(void){
        int sockfd, new_sockfd;
        struct sockaddr_in host_addr,client_addr;
        socklen_t sin_size;
        int recv_length=1,yes=1;
        char buffer[BUFFER_LEN];

        if((sockfd = socket(PF_INET , SOCK_STREAM , 0)) == -1)
                fatal("in socket");

        if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1)
                fatal("setting socket option SO_REUSEADDR");

        host_addr.sin_family = AF_INET;
        host_addr.sin_port = htons(PORT);
        host_addr.sin_addr.s_addr = 0;
        memset(&(host_addr.sin_zero), '\0', 8);

        if(bind(sockfd,(struct sockaddr *)&host_addr,sizeof(struct sockaddr)) == -1)
                fatal("binding to socket");
        if(listen(sockfd, 5) == -1)
                fatal("listening on socket");

        while(1){
                char welcome_msg[] = "Hey look at that you connected properly\n";
                sin_size = sizeof(struct sockaddr_in);
                new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size);
                if(new_sockfd == -1)
                                fatal("acception connection");
                printf("server: got connection from %s on port %d\n",
                        inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
                send(new_sockfd, welcome_msg,sizeof(welcome_msg),0);
                recv_length = recv(new_sockfd, &buffer, BUFFER_LEN, 0);
                while(recv_length > 0){
                        printf("Recieved: %d bytes\n",recv_length);
                        dump(buffer,recv_length);
                        recv_length = recv(new_sockfd, &buffer, BUFFER_LEN, 0);
                }
                close(new_sockfd);

        }
        return 0;
}