---
name: "ost_SocketPort"
section: "3"
platform: "linux"
package: "libcommoncpp2-doc"
version: "1.8.1-10"
release: "Debian 11 (Bullseye)"
platforms: ["linux"]
url: "https://new.carta.tech/ost_SocketPort"
---

# ost\_SocketPort(3)

The socket port is an internal class which is attached to and then serviced by a specific SocketService 'object'.

## NAME

ost::SocketPort - The socket port is an internal class which is attached to and then serviced by a specific **SocketService** 'object'.

## SYNOPSIS

`#include <socketport.h>`

Inherits **ost::Socket**, and **ost::TimerPort**.

### Public Member Functions

void **setTimer** (**timeout\_t** timeout=0)\
 Derived setTimer to notify the service thread pool of change in expected timeout.  void **incTimer** (**timeout\_t** timeout)\
 Derived incTimer to notify the service thread pool of a change in expected timeout.

### Protected Member Functions

**SocketPort** (**SocketService** \*svc, **TCPSocket** &tcp)\
 Construct an accepted TCP socket connection from a specific bound TCP server.  **SocketPort** (**SocketService** \*svc, **TCPV6Socket** &tcp)\
 **SocketPort** (**SocketService** \*svc, const **IPV4Address** &ia, **tpport\_t** port)\
 Construct a bound UDP socket for use in deriving realtime UDP streaming protocols handled by thread pool objects.  **SocketPort** (**SocketService** \*svc, const **IPV6Address** &ia, **tpport\_t** port)\
 **SocketPort** (**SocketService** \*svc, const **IPV4Host** &ih, **tpport\_t** port)\
 A non-blocking constructor for outbound tcp connections.  **SocketPort** (**SocketService** \*svc, const **IPV6Host** &ih, **tpport\_t** port)\
 void **attach** (**SocketService** \*svc)\
 Attach yourself to the service pool thread object.  virtual **~SocketPort** ()\
 Disconnect the socket from the service thread pool and the remote connection.  void **setDetectPending** (bool)\
 Used to indicate if the service thread should monitor pending data for us.  bool **getDetectPending** (void) const\
 Get the current state of the DetectPending flag.  void **setDetectOutput** (bool)\
 Used to indicate if output ready monitoring should be performed by the service thread.  bool **getDetectOutput** (void) const\
 Get the current state of the DetectOutput flag.  virtual void **expired** (void)\
 Called by the service thread pool when the objects timer has expired.  virtual void **pending** (void)\
 Called by the service thread pool when input data is pending for this socket.  virtual void **output** (void)\
 Called by the service thread pool when output data is pending for this socket.  virtual void **disconnect** (void)\
 Called by the service thread pool when a disconnect has occured.  **Error** **connect** (const **IPV4Address** &ia, **tpport\_t** port)\
 Connect a **Socket** Port to a known peer host.  **Error** **connect** (const **IPV6Address** &ia, **tpport\_t** port)\
 ssize\_t **send** (const void \*buf, size\_t len)\
 Transmit 'send' data to a connected peer host.  ssize\_t **receive** (void \*buf, size\_t len)\
 Receive a message from any host.  ssize\_t **peek** (void \*buf, size\_t len)\
 Examine the content of the next packet.

### Friends

class **SocketService**\

### Additional Inherited Members

## Detailed Description

The socket port is an internal class which is attached to and then serviced by a specific **SocketService** 'object'.

Derived versions of this class offer specific functionality for specific protocols. Both Common C++ supporting frameworks and application objects may be derived from related protocol specific base classes.

A special set of classes, 'SocketPort' and 'SocketService', exist for building realtime streaming media servers on top of UDP and TCP protocols. The 'SocketPort' is used to hold a connected or associated TCP or UDP socket which is being 'streamed' and which offers callback methods that are invoked from a 'SocketService' thread. **SocketService**'s can be pooled into logical thread pools that can service a group of SocketPorts. A millisecond accurate 'timer' is associated with each **SocketPort** and can be used to time synchronize **SocketPort** I/O operations.

**Author**

David Sugar dyfet@ostel.com

base class for realtime and thread pool serviced protocols.

**Examples** **tcpservice.cpp**.

## Constructor & Destructor Documentation

### ost::SocketPort::SocketPort (SocketService \* svc, TCPSocket & tcp)` [protected]`

Construct an accepted TCP socket connection from a specific bound TCP server. This is meant to derive advanced application specific TCP servers that can be thread pooled.

**Parameters**

*svc* pool thread object. \
 *tcp* socket object to accept.

### ost::SocketPort::SocketPort (SocketService \* svc, TCPV6Socket & tcp)` [protected]`

### ost::SocketPort::SocketPort (SocketService \* svc, const IPV4Address & ia, tpport\_t port)` [protected]`

Construct a bound UDP socket for use in deriving realtime UDP streaming protocols handled by thread pool objects.

**Parameters**

*svc* pool thread object. \
 *ia* address of interface to bind. \
 *port* number to bind to.

### ost::SocketPort::SocketPort (SocketService \* svc, const IPV6Address & ia, tpport\_t port)` [protected]`

### ost::SocketPort::SocketPort (SocketService \* svc, const IPV4Host & ih, tpport\_t port)` [protected]`

A non-blocking constructor for outbound tcp connections. To detect when the connection is established, overload **SocketPort::output()**. **SocketPort::output()** get's called by the **SocketService** when the connection is ready, **SocketPort::disconnect()** when the connect failed. at the moment you should set the socket state to 'CONNECTED' when **SocketPort::output()** get's called for the first time.

**Parameters**

*svc* pool thread object. \
 *ih* addess to connect to. \
 *port* number to connect to.

### ost::SocketPort::SocketPort (SocketService \* svc, const IPV6Host & ih, tpport\_t port)` [protected]`

### virtual ost::SocketPort::~SocketPort ()` [protected]`, ` [virtual]`

Disconnect the socket from the service thread pool and the remote connection.

## Member Function Documentation

### void ost::SocketPort::attach (SocketService \* svc)` [protected]`

Attach yourself to the service pool thread object. The later version.

**Parameters**

*svc* pool thread object

### Error ost::SocketPort::connect (const IPV4Address & ia, tpport\_t port)` [protected]`

Connect a **Socket** Port to a known peer host. This is normally used with the UDP constructor. This is also performed as a non-blocking operation under Posix systems to prevent delays in a callback handler.

**Returns**

0 if successful.

**Parameters**

*ia* address of remote host or subnet. \
 *port* number of remote peer(s).

### Error ost::SocketPort::connect (const IPV6Address & ia, tpport\_t port)` [protected]`

### virtual void ost::SocketPort::disconnect (void)` [protected]`, ` [virtual]`

Called by the service thread pool when a disconnect has occured.

### virtual void ost::SocketPort::expired (void)` [protected]`, ` [virtual]`

Called by the service thread pool when the objects timer has expired. Used for timed events.

### bool ost::SocketPort::getDetectOutput (void) const` [inline]`, ` [protected]`

Get the current state of the DetectOutput flag.

### bool ost::SocketPort::getDetectPending (void) const` [inline]`, ` [protected]`

Get the current state of the DetectPending flag.

### void ost::SocketPort::incTimer (timeout\_t timeout)

Derived incTimer to notify the service thread pool of a change in expected timeout. This allows **SocketService** to reschedule all timers. Otherwise same as **TimerPort**.

**Parameters**

*timeout* in milliseconds.

### virtual void ost::SocketPort::output (void)` [protected]`, ` [virtual]`

Called by the service thread pool when output data is pending for this socket.

### ssize\_t ost::SocketPort::peek (void \* buf, size\_t len)` [inline]`, ` [protected]`

Examine the content of the next packet. This can be used to build 'smart' line buffering for derived TCP classes.

**Parameters**

*buf* pointer to packet buffer to examine. \
 *len* of packet buffer to examine.

**Returns**

number of bytes actually available.

References \_IOLEN64.

### virtual void ost::SocketPort::pending (void)` [protected]`, ` [virtual]`

Called by the service thread pool when input data is pending for this socket.

### ssize\_t ost::SocketPort::receive (void \* buf, size\_t len)` [inline]`, ` [protected]`

Receive a message from any host. This is used in derived classes to build protocols.

**Parameters**

*buf* pointer to packet buffer to receive. \
 *len* of packet buffer to receive.

**Returns**

number of bytes received.

References \_IOLEN64.

### ssize\_t ost::SocketPort::send (const void \* buf, size\_t len)` [inline]`, ` [protected]`

Transmit 'send' data to a connected peer host. This is not public by default since an overriding protocol is likely to be used in a derived class.

**Returns**

number of bytes sent.

**Parameters**

*buf* address of buffer to send. \
 *len* of bytes to send.

References \_IOLEN64.

### void ost::SocketPort::setDetectOutput (bool)` [protected]`

Used to indicate if output ready monitoring should be performed by the service thread.

### void ost::SocketPort::setDetectPending (bool)` [protected]`

Used to indicate if the service thread should monitor pending data for us.

### void ost::SocketPort::setTimer (timeout\_t timeout = `0`)

Derived setTimer to notify the service thread pool of change in expected timeout. This allows **SocketService** to reschedule all timers. Otherwise same as **TimerPort**.

**Parameters**

*timeout* in milliseconds.

## Friends And Related Function Documentation

### friend class SocketService` [friend]`

## Author

Generated automatically by Doxygen for GNU CommonC++ from the source code.
