|
#define | ORTP_FD_SET(d, s) FD_SET(d, s) |
|
#define | ORTP_FD_CLR(d, s) FD_CLR(d, s) |
|
#define | ORTP_FD_ISSET(d, s) FD_ISSET(d, s) |
|
#define | ORTP_FD_ZERO(s) FD_ZERO(s) |
|
#define | session_set_init(ss) ORTP_FD_ZERO(&(ss)->rtpset) |
|
#define | session_set_set(ss, rtpsession) ORTP_FD_SET((rtpsession)->mask_pos,&(ss)->rtpset) |
|
#define | session_set_is_set(ss, rtpsession) ORTP_FD_ISSET((rtpsession)->mask_pos,&(ss)->rtpset) |
|
#define | session_set_clr(ss, rtpsession) ORTP_FD_CLR((rtpsession)->mask_pos,&(ss)->rtpset) |
|
#define | session_set_copy(dest, src) memcpy(&(dest)->rtpset,&(src)->rtpset,sizeof(ortp_fd_set)) |
|
Sending and receiving multiple streams together with only one thread.
This function performs similarly as libc select() function, but performs on #RtpSession instead of file descriptors. session_set_select() suspends the calling process until some events arrive on one of the three sets passed in argument. Two of the sets can be NULL. The first set is interpreted as a set of RtpSession waiting for receive events: a new buffer (perhaps empty) is availlable on one or more sessions of the set, or the last receive operation with rtp_session_recv_with_ts() would have finished if it were in blocking mode. The second set is interpreted as a set of RtpSession waiting for send events, i.e. the last rtp_session_send_with_ts() call on a session would have finished if it were in blocking mode.
When some events arrived on some of sets, then the function returns and sets are changed to indicate the sessions where events happened. Sessions can be added to sets using session_set_set(), a session has to be tested to be part of a set using session_set_is_set().
- Parameters
-
recvs | a set of rtp sessions to be watched for read events |
sends | a set of rtp sessions to be watched for write events |
errors | a set of rtp sessions to be watched for errors |
- Returns
- : the number of sessions on which the selected events happened.