/* YUNTAI KYONG
Advanced Internet Service
term project
*/
#include "socket.h"
#include <stdio.h>
bool

CSocket::startup()
{
	
	WORD wVersionRequested;
	WSADATA wsaData;
	int err; 
	wVersionRequested = MAKEWORD( 2, 2 ); 
	err = WSAStartup( wVersionRequested, &wsaData );
	
	if ( err != 0 ) {
		fprintf(stderr,"WSAStartup failed...\n");
		return false;
	}
	fprintf(stderr,"WSAStartup success...\n");
	return true;
}

bool
CSocket::open(struct sockaddr *name, int namelen, int port)
{
	struct sockaddr_in s;
	
    if ((m_sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
    {
		perror("socket");
		return false;
	}
	
    s.sin_family		= AF_INET;
    s.sin_addr.s_addr	= htonl(INADDR_ANY);
    s.sin_port			= port;
	
    if ( bind(m_sock, (struct sockaddr *)&s, sizeof (s)) < 0 )
    {
		perror ("bind");
		return false;
    }
	
	if (connect(m_sock, name, namelen) < 0)
    {
		perror("connect");
		return false;
    }
    
    return true;
}

bool
CSocket::close()
{
    if( closesocket(m_sock) == 0 )
		return true;
	else
		return false;
}


bool
CSocket::listen(unsigned short port)
{
    struct sockaddr_in s;
	
    if ((m_sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
    {
		perror("socket");
		return false;
    }
	
    s.sin_family		= AF_INET;
    s.sin_addr.s_addr	= htonl(INADDR_ANY);
    s.sin_port			= htons(port);
	
    if ( bind(m_sock, (struct sockaddr *)&s, sizeof (s)) !=0 )
    {
		perror ("bind");
		return false;
    }
	
    return true;
}
	
int 
CSocket::read(void *buffer, int nbytes)
{
	return recv(  m_sock, (char*) buffer, nbytes,  0 );      
}

int
CSocket::write(void *buffer, int nbytes)
{
	return send( m_sock,  (char*) buffer, nbytes, 0 );
}
