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

📄 extmessagesocket.cpp

📁 KphoneSI (kpsi) is a SIP (Session Initiation Protocol) user agent for Linux, with which you can in
💻 CPP
字号:
#include <sys/types.h>#include <sys/socket.h>#include <netinet/ip.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <stdio.h>#include <unistd.h>#include <strings.h>#include <qsettings.h>#include <arpa/inet.h>#include "extmessagesocket.h"int EXTMessageSocket::port_count=0;EXTMessageSocket::EXTMessageSocket( bool usetcp, int min,int max  ){//	int	reuse = 1;	if(usetcp) {	type = SocketTCP;		if ( ( socketfd = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 ) {			perror( "EXTMessageSocket::EXTMessageSocket(): socket() failed" );		}		didcomplain = false;	} else {		type = SocketUDP;		if ( ( socketfd = socket( AF_INET, SOCK_DGRAM, 0 ) ) == -1 ) {			perror( "EXTMessageSocket::EXTMessageSocket(): socket() failed" );		}	didcomplain = false;	}	minP=min;	maxP=max;}EXTMessageSocket::~EXTMessageSocket( void ){	close( socketfd );}int EXTMessageSocket::listenOnEvenPort(void){	int bind_err;		if (minP % 2) minP++;	/* Out of range ? Signal error */	if (minP > maxP) goto error;	//minP+=port_count;	port_count+=2; 	/* Out of range ? Signal error */	if (minP > maxP) goto error;loop:	socketaddress.sin_family = AF_INET;	socketaddress.sin_port = htons(minP);	socketaddress.sin_addr.s_addr = INADDR_ANY;	bzero(&(socketaddress.sin_zero), 8);	bind_err = bind ( socketfd, (struct sockaddr*)&socketaddress, sizeof(struct sockaddr));	if (bind_err == -1) {		minP += 2;		if (minP <= maxP) goto loop;		else goto error;	}	bound = true;	ourport = minP;	minP+=2;	if(type== SocketTCP)	{		if ( ::listen( socketfd, 10 ) == -1 ) return -1;	}	return 0;error:	perror("EXTMessageSocket::listen(): Can't find a free port in specified range");	return -1;}

⌨️ 快捷键说明

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