00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "defs.h"
00022 #include "smsg.h"
00023
00024 #define WANT_BUGFIX
00025
00026
00027
00028
00029 int main(void)
00030 {
00031 int fd_server, fd_client, i;
00032 #ifdef WANT_BUGFIX
00033 int fd_server_w;
00034 #endif
00035 ssize_t nread;
00036 struct simple_message msg;
00037 char fifo_name[100];
00038
00039 printf("server started\n");
00040 if (mkfifo(SERVER_FIFO_NAME, PERM_FILE) == -1 && errno != EEXIST)
00041 EC_FAIL
00042
00043 ec_neg1( fd_server = open(SERVER_FIFO_NAME, O_RDONLY) )
00044 #ifdef WANT_BUGFIX
00045 ec_neg1( fd_server_w = open(SERVER_FIFO_NAME, O_WRONLY) )
00046 #endif
00047 while (true) {
00048
00049 ec_neg1( nread = read(fd_server, &msg, sizeof(msg)) )
00050
00051 if (nread == 0) {
00052 errno = ENETDOWN;
00053 EC_FAIL
00054 }
00055 for (i = 0; msg.sm_data[i] != '\0'; i++)
00056 msg.sm_data[i] = toupper(msg.sm_data[i]);
00057 ec_false( make_fifo_name(msg.sm_clientpid, fifo_name,
00058 sizeof(fifo_name)) )
00059 ec_neg1( fd_client = open(fifo_name, O_WRONLY) )
00060 ec_neg1( write(fd_client, &msg, sizeof(msg)) )
00061 ec_neg1( close(fd_client) )
00062 }
00063
00064 ec_neg1( close(fd_server) )
00065 #ifdef WANT_BUGFIX
00066 ec_neg1( close(fd_server_w) )
00067 #endif
00068 exit(EXIT_SUCCESS);
00069
00070 EC_CLEANUP_BGN
00071 exit(EXIT_FAILURE);
00072 EC_CLEANUP_END
00073 }