www.pudn.com > acdx.rar > ServerSocket.h


#if !defined(ServerSocket_H) 
#define ServerSocket_H 
 
#include "Socket.h" 
//#include "ConnectSocket.h" 
 
 
 
//////////////////////////////////////////////////////////////////////////////// 
// ServerSocket 
// 
// Purpose: class for reading/writing a socket 
 
 
//##ModelId=424BB6420372 
class ServerSocket : 
	public Socket 
{ 
protected: 
 
	//##ModelId=424BB6420374 
	long			_noQued; 
 
public: 
 
 
	//##ModelId=424BB6420382 
	ServerSocket ( long noQued ) : 
		Socket(), 
		_noQued(noQued) 
	{ 
		 
	} 
 
	//##ModelId=424BB6420392 
	ServerSocket ( ServerSocket & sock ) : 
		Socket( (Socket &) sock ), 
		_noQued(0) 
	{ 
		_noQued = sock._noQued; 
	} 
 
 
 
 
	//##ModelId=424BB6420394 
	virtual ~ServerSocket () 
	{ 
		close(); 
	} 
 
	// open methods 
	//##ModelId=424BB6420396 
	bool open ( long port ) 
	{ 
		// show using local host 
		string host = "";//"localhost"; 
 
		// get socket 
		_socket = socket(PF_INET,SOCK_STREAM,0); 
 
		if ( _socket == INVALID_SOCKET ) 
			return false; 
 
		// init address in 
		initSockAddrIn( host, port, _addrIn ); 
 
		// bind socket 
		if ( bind( _socket, (const SOCKADDR *) &_addrIn, sizeof(_addrIn) ) == SOCKET_ERROR ) 
		{ 
			int error = getLastError(); 
			return false; 
		} 
 
		return true; 
	} 
 
 
	//##ModelId=424BB64203A1 
	bool listen () 
	{ 
		// listen for connection 
		if ( ::listen( _socket, _noQued ) != 0 ) 
		{ 
			long error = getLastError(); 
 
			return false; 
		} 
		else 
			return true; 
	} 
 
	//##ModelId=424BB64203A2 
	bool accept ( Socket & socket ) 
	{ 
 
		// get new socket 
		SOCKADDR addr; 
		int		 size = sizeof(addr); 
		memset( &addr, 0, sizeof(addr) ); 
 
		SOCKET sock = 
		::accept( _socket, &addr, &size ); 
 
		if ( sock == INVALID_SOCKET ) 
		{ 
			int err = getLastError(); 
 
			return false; 
		} 
		else 
		{ 
			socket.create( sock, addr ); 
			return true; 
		} 
	} 
 
}; 
 
 
 
#endif