точно говорю что на лине запускалось и работало...
Код: Выделить всё
radist04ka@ cat /localhost/source/tempdaemon/radiktemp3.c
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <unistd.h>
#define SERVER_ADDRESS "0.0.0.0"
#define SERVER_DATA "./meteo.dat"
#define SERVER_NAME "radist04ka"
#define SERVER_PORT 6728
#define TCP_BACKLOG 15
#define MAX_LINE_LEN 80
int main()
{
struct sockaddr_in addr;
socklen_t addrlen;
FILE *file;
int client_fd, n, on, server_port, server_fd;
char *data_path, *server_address;
char buf[MAX_LINE_LEN];
/* Defaults. */
data_path = SERVER_DATA;
server_address = SERVER_ADDRESS;
server_port = SERVER_PORT;
/* Setup listener. */
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(server_port);
if (inet_aton(server_address, &addr.sin_addr) == 0)
errx(1, "invalid listen address \"%s\"", server_address);
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
err(1, "socket");
on = 1;
if (setsockopt(server_fd, SOL_SOCKET,
SO_REUSEADDR, &on, sizeof(on)) != 0)
err(1, "setsockopt");
if (bind(server_fd, (struct sockaddr *)&addr, sizeof(addr)) != 0)
err(1, "bind");
if (listen(server_fd, TCP_BACKLOG) != 0)
err(1, "listen");
/* Daemonize. */
if (daemon(1, 1) == -1)
err(1, "cannot daemonize");
openlog(SERVER_NAME, LOG_PID | LOG_NDELAY, LOG_DAEMON);
syslog(LOG_INFO, "Waiting for connections on %s port %d",
inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
/* Loop. */
while(1) {
/* Handle connection. */
memset(&addr, 0, sizeof(addr));
addrlen = sizeof(addr);
client_fd = accept(server_fd, (struct sockaddr *)&addr, &addrlen);
if (client_fd == -1) {
syslog(LOG_ERR, "accept(): %s", strerror(errno));
continue;
}
syslog(LOG_INFO, "Accept connection from %s:%d",
inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
n = read(client_fd, &buf, sizeof(buf) - 1);
if (n < 1) {
syslog(LOG_ERR, "read(): %s. Closing connection",
strerror(errno));
close(client_fd);
continue;
}
buf[n] = 0;
syslog(LOG_INFO, "got: \"%s\"\n", buf);
if (strncmp(buf, "TEST", 4) == 0) {
strncpy(buf, "OK\n", sizeof(buf) -1);
buf[sizeof(buf) - 1] = 0;
} else if(strncmp(buf, "GETTEST", 7) == 0) {
file = fopen(data_path, "r");
if (file == NULL ||
fgets(buf, sizeof(buf), file) == NULL) {
syslog(LOG_ERR, "file: %s", strerror(errno));
strncpy(buf, "ERR\n", sizeof(buf) -1);
buf[sizeof(buf) - 1] = 0;
}
if (file)
fclose(file);
} else {
syslog(LOG_INFO, "bad command, closing connection");
close(client_fd);
continue;
}
syslog(LOG_INFO, "answer: \"%s\"\n", buf);
write(client_fd, &buf, strlen(buf));
close(client_fd);
}
}