관리 메뉴

Gyejoong's Information

daytime서버 코딩 본문

Study/Socket programming

daytime서버 코딩

연계중 2016. 9. 12. 07:26
반응형

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <arpa/inet.h>

#include <sys/socket.h>

#include <time.h>


#define MAXLINE 4096


void err_quit(const char *message);

void err_sys(const char *message);


int main(int argc, char *argv[]){


// 1. socket

int listenfd;

if ( ( listenfd = socket(AF_INET,SOCK_STREAM,0)) < 0)

err_sys("socket error");


// 2. bind

struct sockaddr_in servaddr;

memset(&servaddr,0,sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(13);

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

if (bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < 0)

err_sys("bind error");


// 3. listen

if(listen(listenfd,SOMAXCONN) < 0)

err_sys("listen error");


for( ; ; ) {

// 4. accept

int connfd;

struct sockaddr_in cliaddr;

socklen_t len = sizeof(cliaddr);

if ( (connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&len)) < 0)

err_sys("accept error");


// 5. inet_ntop

char cliname[ADDRSTRLEN];

if (inet_ntop(AF_INET,&cliaddr.sin_addr,cliname,sizeof(cliname)) < 0)

printf("Handling client %s:%d\n",cliname,ntohs(cliaddr.sin_port));

else

err_sys("inet_ntop error");


// 6. write

time_t ticks = time(NULL);

char buff[MAXLINE];

snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));

if(write(connfd,buff,strlen(buff)) < 0)

err_sys("write error");

close(connfd);

}

}


void err_quit(const char *message){

fputs(message,stderr);

fputc('\n',stderr);

exit(1);

}


void err_sys(const char *message){

perror(message);

exit(1);

}

반응형
Comments