📄 rvsocketselect.h
字号:
/*****************************************************************************
Filename : rvsocketselect.h
Description:
******************************************************************************
Copyright (c) 1999 RADVision Inc.
************************************************************************
NOTICE:
This document contains information that is proprietary to RADVision Inc.
No part of this publication may be reproduced in any form whatsoever
without written prior approval by RADVision Inc.
RADVision Inc. reserves the right to revise this publication and make
changes without obligation to notify any person of such revisions or
changes.
******************************************************************************
$Revision:$
$Date:$
$Author: S. Cipolli$
*****************************************************************************/
#ifndef RV_SOCKETSELECT_H
#define RV_SOCKETSELECT_H
#include "rvalloc.h"
#include "rvptrlist.h"
#include "rvmutex.h"
#include "rvsocket.h"
#include "rvsocketaddr.h"
#include "rvtime.h"
#if defined(RV_SOCKETS_NUCLEUS)
#include <nucleus.h>
#include <inc/nu_net.h>
/* redefine types and command for Nucleus */
typedef FD_SET Rv_fd_set;
#define RV_FD_ZERO NU_FD_Init
#define RV_FD_SET NU_FD_Set
#define RV_FD_ISSET NU_FD_Check
#define RV_FD_CLR NU_FD_Reset
#else
typedef fd_set Rv_fd_set;
#define RV_FD_ZERO FD_ZERO
#define RV_FD_SET FD_SET
#define RV_FD_ISSET FD_ISSET
#define RV_FD_CLR FD_CLR
#endif
struct RvSocketSelect_;
typedef struct RvSocketListener_ {
RvSocket* socket;
void (*func)(struct RvSocketSelect_*, struct RvSocketListener_*, void*);
void* data;
RvBool activated;
#if defined(RV_SOCKETS_PSOS)
RvSocket sharesocket;
#endif
} RvSocketListener;
RvSocketListener* rvSocketListenerConstruct(RvSocketListener* sl,RvSocket* s,
void (*func)(struct RvSocketSelect_*, struct RvSocketListener_*, void*), void* data);
#define rvSocketListenerDestruct(sl)
#define rvSocketListenerGetSocket(sl) ((sl)->socket)
#define rvSocketListenerGetFunc(sl) ((sl)->func)
#define rvSocketListenerGetData(sl) ((sl)->data)
#define rvSocketListenerIsActivated(sl) ((sl)->activated)
#define rvSocketListenerDeactivate(sl) ((sl)->activated = rvFalse)
#define rvSocketListenerActivate(sl) ((sl)->activated = rvTrue)
typedef enum {
RV_SOCKETSELECTSTATE_UNBORN,
RV_SOCKETSELECTSTATE_ALIVE,
RV_SOCKETSELECTSTATE_TERMINATED
} RvSocketSelectState;
typedef struct RvSocketSelect_ {
RvSocketSelectState state;
RvMutex listLock; /* Guard for the listeners list */
RvPtrList listeners; /* The listeners list */
RvSocket commandSocket; /* Socket for sending/receiving commands */
RvSocketAddr commandSocketAddr; /* Socket address to send commands to */
RvBool postmsg; /* must send wake-up command (for registers) when set to rvTrue */
#if defined(RV_OS_OSE)
RvSocket dummySocket; /* OSE workaround for select */
#endif
RvPtrListIter iter;
} RvSocketSelect;
#if defined(__cplusplus)
extern "C" {
#endif
RvSocketSelect* rvSocketSelectConstruct(RvSocketSelect* ss, RvAlloc* a);
void rvSocketSelectDestruct(RvSocketSelect* ss);
void rvSocketSelectStart(RvSocketSelect* ss);
void rvSocketSelectStop(RvSocketSelect* ss);
void rvSocketSelectRegisterListener(RvSocketSelect* ss,
RvSocketListener* sl);
void rvSocketSelectUnregisterListener(RvSocketSelect* ss,
RvSocketListener* sl);
RvSocketListener *rvSocketSelectUnregisterSocket(RvSocketSelect* ss, RvSocket *socket);
int rvSocketSelect_(int nfds, Rv_fd_set *readfds, Rv_fd_set *writefds, Rv_fd_set *exceptfds, const RvTimespec *timeout);
#define rvSocketSelectGetState(ss) ((ss)->state)
#if defined(__cplusplus)
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -