---
name: "localclientsocket"
section: "3bobcat"
platform: "linux"
package: "libbobcat-dev"
version: "6.07.01-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/localclientsocket"
---

# localclientsocket(3bobcat)

Client Socket connecting to a Server in the Unix Domain

## NAME

FBB::LocalClientSocket - Client Socket connecting to a Server in the Unix Domain

## SYNOPSIS

**#include \<bobcat/localclientsocket\>**\
 Linking option: *-lbobcat*

## DESCRIPTION

An **FBB::LocalClientSocket** may be constructed to connect to a server process in the Unix Domain. The socket made available by the **FBB:LocalClientSocket** may be used to initialize a **std::istream** and/or **std::ostream**. The **std::istream** is used to read information from the server process to which the **FBB::LocalClientSocket** connects, The **std::ostream** is used to send information to the server process to which the **FBB::LocalClientSocket** connects.  Since a socket may be considered a *file descriptor* the available **FBB::IFdStream**, **FBB::IFdStreamBuf**, **FBB::OFdStream**, and **FBB::OFdStreamBuf** classes may be used profitably here. Note that having available a socket does not mean that this defines the communication protocol. It is (still) the responsibility of the programmer to comply with an existing protocol or to implement a tailor-made protocol. The latter situation implies that the sequence of input- and output operations is defined by the programmer.

## NAMESPACE

**FBB**\
 All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace **FBB**.

## INHERITS FROM

**FBB::LocalSocketBase**

## CONSTRUCTOR

- o

  **LocalClientSocket()**:\
   This constructor merely creates a **FBB::LocalClientSocket** object. Before it can be used, its *open()* member must be called.

- o

  **LocalClientSocket(std::string const &name)**:\
   This constructor initializes an **FBB::LocalClientSocket** object, using the named Unix Domain socket to connect to the server using the named Unix Domain socket. An **FBB::Exception** is thrown if the socket could not be constructed. The construction of the socket does not mean that a connection has actually been established. In order to connect to the server, the member **connect()** (see below) should be used.

Copy and move constructors (and assignment operators) are not available.

## MEMBER FUNCTION

- o

  **int connect()**:\
   This member returns a socket that can be used to communicate with the server process. An **FBB::Exception** exception is thrown if the connection could not be established.

- o

  **open(std::string const &name)**:\
   This member function prepares the **FBB::LocalClientSocket** object, constructed earlier using the default constructor, for use.  The named Unix Domain socket is used to connect to the server using the named Unix Domain socket. An **FBB::Exception** is thrown if the socket could not be constructed. The construction of the socket does not mean that a connection has actually been established. In order to connect to the server, the member **connect()** should be used.

## EXAMPLE

See also the [**localserversocket**(3bobcat)](/localserversocket/3bobcat.md) example.

```
    #include <iostream>
    #include <bobcat/localclientsocket>
    #include <bobcat/ifdstream>
    #include <bobcat/ofdstream>
    using namespace std;
    using namespace FBB;
    int main(int argc, char **argv)
    try
    {
        if (argc == 1)
        {
            cerr << "Provide filename representing the unix domain socket\n";
            return 1;
        }
        LocalClientSocket client(argv[1]);
        int fd = client.connect();
        string line;
        cout << "Connecting to socket " << fd << endl;
        IFdStream in(fd);                 // stream to read from
        OFdStream out(fd);                // stream to write to
        while (true)
        {
                                    // Ask for a textline, stop if empty / none
            cout << "? ";
            if (!getline(cin, line) || line.length() == 0)
                return 0;
            cout << "Line read: " << line << endl;
                                    // Return the line to the server
            out << line.c_str() << endl;
            cout << "wrote line\n";
                                    // Wait for a reply from the server
            getline(in, line);
            cout << "Answer: " << line << endl;
        }
    }
    catch (Exception const &err)
    {
        cerr << err.what() << "\n" <<
                "Can’t connect to " << argv[1] << ", port " << argv[2] << endl;
        return 1;
    }
```

## FILES

*bobcat/localclientsocket* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md), [**ifdstream**(3bobcat)](/ifdstream/3bobcat.md), [**ifdbuf**(3bobcat)](/ifdbuf/3bobcat.md), [**clientsocket**(3bobcat)](/clientsocket/3bobcat.md), [**localserversocket**(3bobcat)](/localserversocket/3bobcat.md), [**localsocketbase**(3bobcat)](/localsocketbase/3bobcat.md), [**ofdstream**(3bobcat)](/ofdstream/3bobcat.md), [**ofdstream**(3bobcat)](/ofdstream/3bobcat.md)

## BUGS

None Reported.

## BOBCAT PROJECT FILES

- o

  *https://fbb-git.gitlab.io/bobcat/*: gitlab project page;

Debian Bobcat project files:

- o

  *libbobcat6*: debian package containing the shared library, changelog and copyright note;

- o

  *libbobcat-dev*: debian package containing the static library, headers, manual pages, and developer info;

## BOBCAT

Bobcat is an acronym of \`Brokken’s Own Base Classes And Templates’.

## COPYRIGHT

This is free software, distributed under the terms of the GNU General Public License (GPL).

## AUTHOR

Frank B. Brokken (**f.b.brokken@rug.nl**).
