#define SOLARIS24 1 #define TCP_DEBUG #include #include "mrmp.h" /* #include "../RMP/system.h" #include "../RMP/rmp.hxx" */ typedef enum { NOT_CONNECTED, WAITING, CONNECTED } STATE; typedef enum { NON_BLOCKING, BLOCKING} MODE; typedef enum { QOS_OPT, TTL_OPT, MODE_OPT } OPTION; typedef struct _messageData { int length; /* Message length */ char *data; /* pointers to the actual data */ struct _messageData *next; /* pointer to the next message */ } MessageData; struct _sockIdList { mRMPGroup *group; /* Group the socket belong to */ int sd; /* Socket id */ unsigned char ttl; /* Time to live value */ QOS qos; /* Quality of Service */ STATE state; /* Current state of socket */ MODE mode; /* Blocking mode */ struct _messageData *messages; /* Message queue of the socket */ struct _sockIdList *next; /* pointer to the next socket */ }; typedef struct _sockIdList *SockIdList; void leftGroup(mRMPEvent *e); void leaveGroup(int sig); int RMPprocess_init(); SockIdList GetEntryBySID(int sockId); SockIdList GetEntryByGroup(char *groupName); int DeleteEntryBySID(int sockId); void DisconnectAllSocket(); void handleMessage(mRMPEvent *in); int OutOfRange(QOS option); int NotTimeOut(struct timeval timeout, struct timeval start); int RMPSocket(); int RMPConnect(int sockId, char *groupName); int RMPSetSockOpt(int sockId, int option, void *value, int len); int RMPGetSockOpt(int sockId, int option, void *value, int *len); int RMPSelect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int RMPRead(int sockId, char *buf, int nbytes); int RMPWrite(int sockId, char *buf, int nbytes); int RMPClose(int sockId); int RMPInit(); int LastSocketGroup(int sock);