Made socket compile under Linux. Some functions still need to be implemented

This commit is contained in:
Micke Prag 2010-10-20 14:51:43 +00:00
parent 0291473b01
commit c94afb760e

View file

@ -15,17 +15,20 @@ int connectWrapper(int sockfd, const struct sockaddr *addr, socklen_t addrlen) {
class Socket::PrivateData { class Socket::PrivateData {
public: public:
SOCKET_T socket; SOCKET_T socket;
bool connected;
}; };
Socket::Socket() { Socket::Socket() {
d = new PrivateData; d = new PrivateData;
d->socket = 0; d->socket = 0;
d->connected = false;
} }
Socket::Socket(SOCKET_T socket) Socket::Socket(SOCKET_T socket)
{ {
d = new PrivateData; d = new PrivateData;
d->socket = socket; d->socket = socket;
d->connected = true;
} }
Socket::~Socket(void) { Socket::~Socket(void) {
@ -35,31 +38,42 @@ Socket::~Socket(void) {
void Socket::connect(const std::wstring &server) { void Socket::connect(const std::wstring &server) {
struct sockaddr_un remote; struct sockaddr_un remote;
socklen_t len; socklen_t len;
if ((d->socket = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { if ((d->socket = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
return; return;
} }
std::string name = "/tmp/" + std::string(server.begin(), server.end()); std::string name = "/tmp/" + std::string(server.begin(), server.end());
remote.sun_family = AF_UNIX; remote.sun_family = AF_UNIX;
strcpy(remote.sun_path, name.c_str()); strcpy(remote.sun_path, name.c_str());
len = SUN_LEN(&remote); len = SUN_LEN(&remote);
if (connectWrapper(d->socket, (struct sockaddr *)&remote, len) == -1) { if (connectWrapper(d->socket, (struct sockaddr *)&remote, len) == -1) {
return; return;
} }
d->connected = true;
}
bool Socket::isConnected(){
return d->connected;
} }
std::wstring Socket::read() { std::wstring Socket::read() {
//TODO set d->conneted to false if something goes wrong
char inbuf[BUFSIZE]; char inbuf[BUFSIZE];
memset(inbuf, '\0', sizeof(inbuf)); memset(inbuf, '\0', sizeof(inbuf));
recv(d->socket, inbuf, BUFSIZE - 1, 0); recv(d->socket, inbuf, BUFSIZE - 1, 0);
std::string msg(inbuf); std::string msg(inbuf);
return std::wstring(msg.begin(), msg.end()); return std::wstring(msg.begin(), msg.end());
} }
void Socket::stopReadWait(){
//TODO:
}
void Socket::write(const std::wstring &msg) { void Socket::write(const std::wstring &msg) {
//TODO set d->conneted to false if something goes wrong
std::string newMsg(msg.begin(), msg.end()); std::string newMsg(msg.begin(), msg.end());
send(d->socket, newMsg.c_str(), newMsg.length(), 0); send(d->socket, newMsg.c_str(), newMsg.length(), 0);
} }