0% found this document useful (0 votes)
14 views

Daemon Thread

Uploaded by

Avya Das
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views

Daemon Thread

Uploaded by

Avya Das
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

Implementation of daytime Server as a daemon.

Client:

#include<sys/socket.h>

#include<sys/types.h>

#include<netinet/in.h>

#include<netdb.h>

#include<stdio.h>

#include<strings.h>

#include<stdlib.h>

#include<unistd.h>

int main( )

int sockfd, n,port;

char recvline[1024 + 1]; struct sockaddr_in servaddr;

printf("Enter port");

scanf("%d", &port);

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

printf("socket error");

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

servaddr.sin_port = htons(port);

if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)

printf("connect error");

while ( (n = read(sockfd, recvline, 1024)) > 0)

recvline[n] = 0;

if (fputs(recvline, stdout) == EOF)

printf("fputs error");

if (n < 0)

printf("read error");

close(sockfd);

exit(0);

}
Server:

#include<time.h>

#include <sys/stat.h>

#include<fcntl.h>

#include<sys/socket.h>

#include<netinet/in.h>

#include<arpa/inet.h>

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include <string.h>

#include<signal.h>

#include<syslog.h>

#define MAXFD 64

int daemon_init(const char *,int);

int main(int argc, char **argv)

int listenfd, connfd;

socklen_t addrlen, len;

struct sockaddr *cliaddr;

struct sockaddr_in servaddr;

char buff[1024];
time_t ticks;

int port;

printf("enter port number:\n");

scanf("%d",&port);

daemon_init(argv[0], 0);

listenfd = socket(AF_INET, SOCK_STREAM, 0);

servaddr.sin_family = AF_INET;

servaddr.sin_addr.s_addr = INADDR_ANY;

servaddr.sin_port = htons(port); /* daytime server */

memset(&(servaddr.sin_zero),'\0',8);

bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

listen(listenfd, 5);

cliaddr = malloc(addrlen); for ( ; ; )

len = addrlen;

connfd = accept(listenfd, cliaddr, &len);

ticks = time(NULL);

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

write(connfd, buff, strlen(buff));

close(connfd);
}

int daemon_init(const char *pname, int facility)

int i;

pid_t pid;

if ( (pid = fork()) < 0) return (-1);

else if (pid)

_exit(0); /* parent terminates *

/* child 1 continues... */

if (setsid() < 0) /* become session leader */

return (-1);

signal(SIGHUP, SIG_IGN);

if ( (pid = fork()) < 0)

return (-1);
else if (pid)

_exit(0); /* child 1 terminates */

/* child 2 continues... */

/* for err_XXX() functions */

chdir("/"); /* change working directory */

/* close off file descriptors */

for (i = 0; i < MAXFD; i++)

close(i); /* redirect stdin, stdout, and stderr to /dev/null */

open("/dev/null", 444);

open("/dev/null", 666);

open("/dev/null", O_RDWR);

openlog(pname, LOG_PID, facility);

return (0); /* success */

You might also like