blob: a72ea1fd37ec25c4ac2680f3ec43fa6eaf9075cd [file] [log] [blame]
#ifndef _PRAGMA_COPYRIGHT_
#define _PRAGMA_COPYRIGHT_
#pragma comment(copyright, "%Z% %I% %W% %D% %T%\0")
#endif /* _PRAGMA_COPYRIGHT_ */
/****************************************************************************
* Copyright (c) 2008, 2010 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0s
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
Classes: Socket, SocketException
Description: Socket manipulation.
Author: Tu HongJ, Liu Wei
History:
Date Who ID Description
-------- --- --- -----------
10/06/08 tuhongj Initial code (D153875)
****************************************************************************/
#ifndef _SOCKET_HPP
#define _SOCKET_HPP
#include <netdb.h>
#include <netinet/in.h>
#include <string>
using namespace std;
class Socket
{
public:
enum DIRECTION
{
READ,
WRITE,
BOTH
};
private:
int socket;
int accSockets[32];
int numListenfds;
static int disableIpv6;
static int connTimes;
public:
Socket(int sockfd = -1);
~Socket();
int setMode(int sockfd, bool mode); // blocking or non-blocking
int setFd(int fd);
int getFd() { return socket; }
int listen(int &port, char *hname = NULL);
int iflisten(int &port, const string &ifname);
int connect(const char *hostName, in_port_t port);
int accept();
int stopAccept();
int send(const char *buf, int len);
int recv(char *buf, int len);
void close(DIRECTION how);
static int getDisableIPv6();
static void setDisableIPv6(int flag);
static void setConnTimes(int cnt);
int numOfListenFds();
int getListenSockfds(int *fds);
};
class SocketException
{
public:
enum CODE
{
NET_ERR_SOCKET = -101,
NET_ERR_CONNECT = -102,
NET_ERR_GETADDRINFO = -103,
NET_ERR_SEND = -104,
NET_ERR_RECV = -105,
NET_ERR_CLOSED = -106,
NET_ERR_INTR = -107,
NET_ERR_FCNTL = -108,
NET_ERR_ACCEPT = -109,
NET_ERR_DATA = -110,
NET_ERR_BIND = -111
};
private:
int errCode;
int errNum;
string errMsg;
public:
SocketException(int code) throw();
SocketException(int code, int num) throw();
int getErrCode() const throw();
int getErrNum() const throw();
string & getErrMsg() throw();
};
#endif