other versions
- stretch 4.04.00-1
- testing 4.08.06-1
- unstable 4.08.06-1
- experimental 4.09.00-1
| FBB::LocalServerSocket(3bobcat) | Unix Domain Server Socket | FBB::LocalServerSocket(3bobcat) | 
NAME¶
FBB::LocalServerSocket - Unix Domain Server socket accepting connection requestsSYNOPSIS¶
#include <bobcat/localserversocket>Linking option: -lbobcat
DESCRIPTION¶
An FBB::LocalServerSocket defines a Unix Domain server socket, listening for connection requests from the local host using a Unix Domain socket. Connection requests may be accepted in either blocking or non-blocking modes. When a connection is accepted a socket is returned which may be used to read information from or write information to the client requesting the connection. The socket that is made available is a file descriptor which may be used to initialize a std::istream and/or std::ostream. The std::istream is used to read information from the client process; the std::ostream is used to send information to the client process. 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¶
FBBAll constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace FBB.
INHERITS FROM¶
FBB::LocalSocketBaseENUMERATION¶
The following enumeration is defined in th class FBB::LocalServerSocket:enum Socket
  
  This enumeration holds two values:
- o
- KEEP:
    
 When this value is specified at construction time, the file representing the Unix Domain Socket is not removed when the LocalServerSocket is destroyed.
- o
- UNLINK:
    
 When this value is specified at construction time, the file representing the Unix Domain Socket is removed when the LocalServerSocket is destroyed. As a socket cannot be reused, this is the default value used with the LocalServerSocket constructor.
CONSTRUCTOR¶
- o
- LocalServerSocket():
    
 This constructor creates an empty (non-functioning) FBB::LocalServerSocket object. Before it can be used, the open() member must be called (see below).
- o
- LocalServerSocket(string const &name, Socket action = UNLINK)
      throw (Exception):
    
 This constructor initializes an FBB::LocalServerSocket object, which will listen for connection requests using the named Unix Domain socket. An FBB::Exception is thrown if the socket could not be constructed. If the constructor is given a second argument FBB::LocalServerSocket::KEEP, the constructed socket is not unlinked when the FBB::LocalServerSocket object is destroyed. The construction of the socket does not mean that the FBB::LocalServerSocket object is actually listening for connections. To start listening, the member listen() should be called. The copy constructor is not available.
MEMBER FUNCTIONS¶
- o
- size_t accept():
    
 The accept() member returns an size_t which is a file descriptor (socket) that may be used to communicate with the client requesting the connection. In more complex programs the returned file descriptor (socket) could be passed to a class derived from FBB::Fork, handling the communication with the child as a separate (child) process.
- o
- void listen(size_t backlog = 5, bool blocking = true):
    
 The listen() member defines the way the FBB::LocalServerSocket will listen for clients requesting a connection. It can be used only once with a FBB::LocalServerSocket. An FBB::Exception object is thrown if listening fails.
- The listen() member’s backlog parameter defines the size of the FBB::LocalServerSocket’s internal queue in which connection requests may be stored waiting for their turn to be serviced. When backlog requests are waiting and another request arrives, then that request is lost.
- The member’s second parameter, blocking, is used to control the blocking mode. By default, blocking is used, and listen() will wait until a connection is established. This is ok in situations where clients connect infrquently and for relatively short time intervals. Otherwise, in more complex programs, an FBB::Selector object can be used to sense input on the server socket and/or on various client sockets.
- o
- void open(string const &name, Socket action = UNLINK):
    
 This member prepares a FBB::LocalServerSocket object for use. It should only be used in combination with the default constructor. Following open() the FBB:::LocalServerSocket object will be able to listen for connection requests using the named Unix Domain socket. An FBB::Exception is thrown if the socket could not be constructed. If the a second argument FBB::LocalServerSocket::KEEP, is provided the constructed socket is not unlinked when the FBB::LocalServerSocket object is destroyed. The construction of the socket does not mean that the FBB::LocalServerSocket object is actually listening for connections. To start listening, the member listen() should be called next.
EXAMPLE¶
See also the localclientsocket(3bobcat) example.    #include <iostream>
    #include <bobcat/localserversocket>
    #include <bobcat/ifdstream>
    #include <bobcat/ofdstream>
    
    using namespace std;
    using namespace FBB;
    
    int main(int argc, char **argv)
    try
    {
        if (argc == 1)
        {
            cerr << "Provide local filename, e.g., /tmp/uds\n";
            return 1;
        }
    
        LocalServerSocket server(argv[1]);
    
        cerr << "server using `" << argv[1] << "’" << endl;
    
        cout << 
            "The server terminates when it receives a single `q’ on a line\n"
            "A connection is terminated when no input is received anymore.\n"
            "Then another connection is possible" << endl;
    
        server.listen();                // listen in blocking mode
    
        while (true)
        {
            int fd = server.accept();
    
            cerr << "Client FD = " << fd << ", " << endl;
    
            IFdStream in(fd);           // stream to read from client
            OFdStream out(fd);          // stream to write to client
            string cmd;
            
            while (getline(in, cmd))
            {
                cout << "Got: " << cmd << endl;
                out << "Got: " << cmd << "\r" << endl;
    
                if (cmd[0] == ’q’)
                    return 0;
            }
            cout << "Ready for another connection\n";
        }
    }
    catch (Exception const &err)
    {
        cerr <<
            err.what() << endl <<
            "Server socket on port " << argv[1] << 
            " can’t be opened" << endl;
        return -1;
    }        
        
FILES¶
bobcat/serversocket - defines the class interfaceSEE ALSO¶
bobcat(7), localclientsocket(3bobcat), fork(3bobcat), ifdstream(3bobcat), ifdstreambuf(3bobcat), localsocketbase(3bobcat), ofdstream(3bobcat), ofdstream(3bobcat), select(2), selector(3bobcat), serversocket(3bobcat)BUGS¶
None Reported.DISTRIBUTION FILES¶
- o
- bobcat_4.04.00-x.dsc: detached signature;
- o
- bobcat_4.04.00-x.tar.gz: source archive;
- o
- bobcat_4.04.00-x_i386.changes: change log;
- o
- libbobcat1_4.04.00-x_*.deb: debian package holding the libraries;
- o
- libbobcat1-dev_4.04.00-x_*.deb: debian package holding the libraries, headers and manual pages;
- o
- http://sourceforge.net/projects/bobcat: public archive location;
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).| 2005-2016 | libbobcat-dev_4.04.00-x.tar.gz |