⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rvsocketselect.h

📁 h.248协议源码
💻 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 + -