daytime서버 코딩
#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);
}