synsyncrecv.c

来自「linux环境下用纯c写的RTP协议的通用开发库」· C语言 代码 · 共 49 行

C
49
字号
/*------------------------------------------------------------------------- * synsyncrecv.c - synsyncrecv *------------------------------------------------------------------------- */#include <syn.h>#include <unistd.h>#include <util.h>#ifdef RTPLIB_SYNCHRONIZE/*----------------------------------------------------------------------- * synsyncrecv - receive and process an incoming synch request from  * the synchronization layer of another session.  * Synchronization is experimental and not well-tested. *----------------------------------------------------------------------- */intsynsyncrecv(struct synsession *pssn, int fd){	struct synsyncargs    ssa;	int			rv, i;	struct cnamelist	*pcnl;	if (read(fd, (char *) &ssa, sizeof(struct synsyncargs)) < 0)		return ERROR;  	if (pthread_mutex_lock(&pssn->ssn_session->sn_cnamemutex) != 0)		return ERROR;	pcnl = (struct cnamelist *) htget(pssn->ssn_session->sn_cnames, (unsigned int) ssa.sa_cname);  	rv = synsyncto(pssn, pcnl, &ssa.sa_ntp, &ssa.sa_localtime);	if (rv == SYN_ADJUSTED) {		for (i = 0; i < SYN_FDCNT; i++) {			if (fd != pssn->ssn_syncfds[i] && pssn->ssn_syncfds[i] != SYN_BADFD)				write(pssn->ssn_syncfds[i], (char *) &ssa, sizeof(struct synsyncargs));		}	}	else		if (rv == SYN_EXTERNALAHEAD)			write(fd, (char *) &ssa, sizeof(struct synsyncargs));  	pthread_mutex_unlock(&pssn->ssn_session->sn_cnamemutex);	return OK;}#endif /* RTPLIB_SYNCHRONIZE */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?