00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <netdb.h>
00021 #include <errno.h>
00022
00023 #include "TcpClientStream.h"
00024 #include "Error.h"
00025 #include "IoStream.h"
00026
00027 namespace mdw
00028 {
00029
00030 TcpClientStream::TcpClientStream(const std::string &host, short port)
00031 {
00032 sockaddr_in addr;
00033 socklen_t len;
00034 struct hostent * resolv;
00035 resolv=gethostbyname(host.c_str());
00036 _socket = socket (AF_INET,SOCK_STREAM,0);
00037 if (_socket == -1)
00038 {
00039 ERROR_ERRNO("Cannot create socket", errno);
00040 }
00041
00042 addr.sin_family = AF_INET;
00043 addr.sin_port=htons(port);
00044 addr.sin_addr=*(struct in_addr*)resolv->h_addr;
00045
00046 if (::connect(_socket, (struct sockaddr *) &addr, sizeof (addr)) < 0)
00047 {
00048 ERROR_ERRNO("Cannot connect socket", errno);
00049 }
00050
00051 }
00052
00053
00054 TcpClientStream::~TcpClientStream()
00055 {
00056 ::close(_socket);
00057 }
00058
00059 void TcpClientStream::output (const char *buffer, int size)
00060 {
00061 if (::write(_socket, buffer, size) == -1)
00062 {
00063 ERROR_ERRNO("Error while writing to " << _socket, errno);
00064 }
00065 }
00066
00067 }