void sanei_debug_msg (int level, int max_level, const char *be, const char *fmt, va_list ap) { char *msg; if (max_level >= level) { #ifdef S_IFSOCK if ( 1 == isfdtype(fileno(stderr), S_IFSOCK) ) { msg = (char *)malloc (sizeof(char) * (strlen(be) + strlen(fmt) + 4)); if (msg == NULL) { syslog (LOG_DEBUG, "[sanei_debug] malloc() failed\n"); vsyslog (LOG_DEBUG, fmt, ap); } else { sprintf (msg, "[%s] %s", be, fmt); vsyslog(LOG_DEBUG, msg, ap); free (msg); } } else #endif { fprintf (stderr, "[%s] ", be); vfprintf (stderr, fmt, ap); } } }
/*赋值 入参:nSockfd - socket句柄 出参:赋值后的socket句柄 */ int CTcp::operator = (int p_iSockfd) { //isfdtype判断nSockfd是否为指定类型,S_IFSOCK判断是否为套接字描述符,返回1是,0不是,-1出错 assert ((m_nSock == -1) && (p_iSockfd > -1) && (isfdtype (p_iSockfd, S_IFSOCK) == 1)); m_nSock = p_iSockfd; return m_nSock; }
int Isfdtype(int fd, int fdtype) { int n; if ( (n = isfdtype(fd, fdtype)) < 0) err_sys("isfdtype error"); return(n); }
/* determine if a file descriptor is in fact a socket */ int is_socket(int fd) { return (isfdtype(fd, S_IFSOCK) == 1); }