performance/socketlocal.c
///////////////////////////////////////////////////////////////////////////////
// Filename: socketlocal.c
///////////////////////////////////////////////////////////////////////////////
// Purpose: test the performance of local sockets via socketpair()
///////////////////////////////////////////////////////////////////////////////
// History:
// ========
//
// Date Time Name Description
// -------- -------- -------- ------------------------------------------------
// 96/02/29 05:54:20 muellerg: created
//
///////////////////////////////////////////////////////////////////////////////
// Feature test switches ///////////////////////////// Feature test switches //
/* NONE */
// System headers /////////////////////////////////////////// System headers //
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
// Local headers ///////////////////////////////////////////// Local headers //
#include "../common.h"
// Macros /////////////////////////////////////////////////////////// Macros //
/* NONE */
// File scope objects /////////////////////////////////// File scope objects //
/* NONE */
// External variables, functions, and classes ///////////// External objects //
/* NONE */
// Signal catching functions ///////////////////// Signal catching functions //
/* NONE */
// Structures, unions, and class definitions /////////////////// Definitions //
/* NONE */
// Functions and class implementation /// Functions and class implementation //
/* NONE */
// Main /////////////////////////////////////////////////////////////// Main //
int
main(int argc, char *argv[])
{
error.set_program_name(argv[0]);
pid_t parent = getpid();
pid_t child;
// esablish signal handler
synchronization_init();
// open connection
int socketdes[2];
// namespace, style, protocol, filedes
if( socketpair(AF_UNIX, SOCK_STREAM, 0 , socketdes) == -1)
error.system("socketpair() error");
if( (child = fork() ) < 0)
error.system("fork error");
if(child == 0)
{
// child
readdata(argv[0], "read", socketdes[0], parent); // synchronized
readdata(argv[0], "read2", socketdes[0], 0); // unsynchronized
}
else
{
// parent
writedata(argv[0], "write", socketdes[1], child); // synchronized
writedata(argv[0], "write2", socketdes[1], 0); // unsynchronized
}
return(EXIT_SUCCESS);
}