tcpmessagesocket.cpp
来自「KphoneSI (kpsi) is a SIP (Session Initia」· C++ 代码 · 共 171 行
CPP
171 行
#include <sys/types.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <sys/file.h>#include <netinet/in.h>#include <arpa/nameser.h>#include <strings.h>#include <unistd.h>#include <stdio.h>#include <errno.h>#include "tcpmessagesocket.h"#include <time.h>#include "../kphone/kstatics.h"TCPMessageSocket::TCPMessageSocket( void ){ type = SocketTCP; if ( ( socketfd = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 ) { perror( "TCPMessageSocket(): socket() failed" ); }}TCPMessageSocket::TCPMessageSocket( int newfd ){ type = SocketTCP; socketfd = newfd; }TCPMessageSocket::~TCPMessageSocket( void ){ close( socketfd );}int TCPMessageSocket::connect( unsigned int portnum ){ socketaddress.sin_family = AF_INET; socketaddress.sin_port = htons( portnum ); socketaddress.sin_addr = *( (struct in_addr *) he->h_addr ); bzero( &( socketaddress.sin_zero ), 8 ); if( ::connect( socketfd, (struct sockaddr *) &socketaddress, sizeof( struct sockaddr ) ) == -1 ) { perror ( "TCPMessageSocket::connect(): connect() failed \n" ); return -1; } return 0;}int TCPMessageSocket::send( const char *sendbuffer, unsigned int length ){ if ( ::send( socketfd, sendbuffer, length, 0 ) == -1 ) { perror( "TCPMessageSocket::send(): send() failed" ); return -1; } return 0;}int TCPMessageSocket::receive( char *recvbuffer, unsigned int maxlength ){ int numbytes; if ( ( numbytes = recv( socketfd, recvbuffer, maxlength, 0 ) ) == -1 ) { perror( "TCPMessageSocket::recieve(): recv() failed" ); return -1; } return numbytes;}unsigned int TCPMessageSocket::listen( unsigned int portnum ){ socketaddress.sin_family = AF_INET; socketaddress.sin_port = htons( portnum ); socketaddress.sin_addr.s_addr = INADDR_ANY; bzero( &( socketaddress.sin_zero ), 8 ); // is this portable? int count = 0; while ( ::bind( socketfd, (struct sockaddr *) &socketaddress, sizeof( struct sockaddr ) ) == -1 && count <= 10 ) { count++; portnum += 2; socketaddress.sin_port = htons( portnum ); } if ( count > 10 ) { perror( "TCPMessageSocket::listen(): bind() failed" ); return 0; } if ( ::listen( socketfd, 20 ) == -1 ) { perror( "TCPMessageSocket::listen(): listen() failed" ); return 0; } return portnum;}int TCPMessageSocket::accept( void ){ int connectfd; socklen_t sockaddr_in_size; sockaddr_in_size = sizeof( struct sockaddr_in ); if ( ( connectfd = ::accept( socketfd, (struct sockaddr *) &socketaddress, \ &sockaddr_in_size ) ) == -1 ) { perror( "TCPMessageSocket::accept(): accept() failed" ); return -1; } return connectfd;}int TCPMessageSocket::listenOnEvenPort( int min, int max ){ return -1;}bool TCPMessageSocket::setHostnamePort( const char *hostname, unsigned int port ){ struct hostent *tHe; time_t begin, end; double gaidiff; if(KStatics::noLine >=1 ) { return false; } time(&begin); tHe = gethostbyname( hostname ); time(&end); gaidiff=difftime(end,begin); if (gaidiff > 0.9E1) { KStatics::noLine=1; } if ( tHe == NULL ) return false; if ( setHostname( hostname ) ) { addr = ((struct in_addr *) he->h_addr)->s_addr; portnum = port; return true; } return false;}bool TCPMessageSocket::cmpSocket( const char *hostname, unsigned int port ) { time_t begin, end; double gaidiff; if(KStatics::noLine >=1 ) { return false; } time(&begin); he = gethostbyname( hostname ); time(&end); gaidiff=difftime(end,begin); if (gaidiff > 0.9E1) { KStatics::noLine=1; } if ( he == NULL ) { perror( "TCPMessageSocket::cmpSocket(): gethostbyname() failed" ); return false; } if( addr == ((struct in_addr *) he->h_addr)->s_addr && portnum == port ) { return true; } else { return false; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?