- 论坛徽章:
- 0
|
#include <stdio.h>
#include <netdb.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/stat.h>
#define S_PORT 6688
#define MAX_BUFFER 1024
int
main (int argc, char *argv[])
{
char buffer[MAX_BUFFER];
char cmd[MAX_BUFFER];
struct sockaddr_in server;
/* Our process ID and Session ID */
pid_t pid, sid;
if (argc < 2)
{
printf ("Start to receive message....\n");
}
s = socket (AF_INET, SOCK_DGRAM, 0);
if (s == -1)
{
fprintf (stderr, "OPEN SOCKET ERROR!\n");
exit (1);
}
addrlen = sizeof (server);
memset (&server, '\0', addrlen);
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl (INADDR_ANY);
server.sin_port = htons (S_PORT);
r = bind (s, (struct sockaddr *) &server, sizeof (server));
if (r == -1)
{
fprintf (stderr, "BIND ERROR!");
exit (0);
}
/* Fork off the parent process */
pid = fork ();
if (pid < 0)
{
exit (EXIT_FAILURE);
}
/* If we got a good PID, then
* we can exit the parent process. */
if (pid > 0)
{
exit (EXIT_SUCCESS);
}
/* Change the file mode mask */
umask (0);
/* Open any logs here */
openlog("Server", LOG_PID, LOG_USER);
/* Create a new SID for the child process */
sid = setsid ();
if (sid < 0)
{
/* Log the failure */
syslog(LOG_ERR , "SETSID error!");
exit (EXIT_FAILURE);
}
/* Change the current working directory */
if ((chdir ("/")) < 0)
{
/* Log the failure */
exit (EXIT_FAILURE);
}
/* Close out the standard file descriptors */
close (STDIN_FILENO);
close (STDOUT_FILENO);
close (STDERR_FILENO);
while (1)
{
syslog(LOG_INFO, "Waiting for message....");
r = recvfrom (s, &buffer, MAX_BUFFER, 0,
(struct sockaddr *) &server, &addrlen);
if (r == -1)
{
fprintf (stderr, "RECEIVE ERROR!");
exit (0);
}
/* put your code here */
}
close (s);
exit (0);
} |
|