---
name: "socket"
section: "1"
platform: "linux"
package: "socket"
version: "1.1-10.1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/socket"
---

# socket(1)

create a TCP or a UNIX domain socket and connect to stdin/out

## NAME

socket - create a TCP or a UNIX domain socket and connect to stdin/out

## SYNOPSIS

**socket** \[ **-bcfqrvw** \] \[ **-p** *command* \] \[ **-B** *local address* \] *host port*\
 **socket** \[ **-bcfqrvw** \] \[ **-p** *command* \] */path*\
 **socket** \[ **-bcfqrvw** \] \[ **-p** *command* \] \[ **-B** *local address* \] **-s** \[ **-l** \] *port*\
 **socket** \[ **-bcfqrvw** \] \[ **-p** *command* \] **-s** \[ **-l** \] */path*

## DESCRIPTION

**Socket** creates an Internet domain TCP or a UNIX domain stream socket and connects it to stdin and stdout. The  *host* argument can be an Internet number in dot-notation (like \`\`130.149.28.10'') or a domain name. In this case it must be possible to resolve the name to a valid Internet address with [*gethostbyname*(3)](/gethostbyname/3.md). The  *port* argument can be a port number or a service name which can be mapped to a port number by [*getservbyname*(3)](/getservbyname/3.md). If an UNIX domain socket is wanted to be created instead of an Internet socket, specify the  *path* instead of an internet (canonical domain named or dot-notated) host. The hostname is treated as a pathname if contains at least a single  slash. I.e. if one wants to create or connect to a socket in the current  directory, use  *./filename* to specify the connection point.

## OPTIONS

- **-b** (background)

  The program forks itself into the background, detaches from its controlling tty, closes the file descriptors associated with the tty, and changes its current directory to the root directory.

- **-B** (local address)

  This option specifies which *local address* to binded to when making a connection.

- **-c** (crlf)

  Linefeed characters (LF) are converted to a Carriage Return Linefeed sequence (CRLF) when written to the socket. CRLF sequences read from the socket are converted to a single LF.

- **-f** (fork)

  When a server connection has been accepted, a separate process is forked to handle the connection in background.

- **-l** (loop)

  (only valid with **-s**) After a connection has been closed, another connection is accepted.

- **-p** (program)

  The specified  *command* is executed for each connection. Its standard input, standard output, and standard error channels are connected to the socket. *Command* can be any shell command since it is passed to `/bin/sh`.

- **-q** (quit)

  The connection is closed when an end-of-file condition occurs on standard input.

- **-r** (read only)

  No data is read from standard input and written to the socket.

- **-s** (server)

  A server socket is created. A *hostname* argument is not required of Internet sockets, only the port number  but a pathname is required for UNIX domain sockets.

- **-v** (verbose)

  Messages about connections etc. are issued to stderr.

- **-w** (write only)

  No data is read from the socket and written to the standard output.

- **-version**

  **Socket** prints its version ID and terminates.  This must be the first argument to have an effect.

## EXAMPLES

The command

-

  `socket -v coma.cs.tu-berlin.de nntp`

connects to the nntp port (port 119) of coma.cs.tu-berlin.de (130.149.28.10).\
 The command

-

  `socket -sl 3425`

creates a server socket on port 3425 on the local host and waits for a connection. After a connection has been closed, a new connection is accepted. \
 The command

-

  `socket -wslqvp "echo Socket! " 1938`

creates a server socket on port 1938 on the local host and waits for a connection. When a connection is accepted, the string "Socket!" is written to the socket. No data is read from the socket and written to the `finger` program. The connection is closed when an end-of-file condition at the standard output of the program  occurs. Then a new connection is accepted.

## DIAGNOSTICS

Lots of diagnostics for failed system calls.

- **unknown host** *host*

  *host*'s address could not be resolved.

- **Signal *signal* caught, exiting**

  **Socket** exits on any signal other than SIGTSTP, SIGCONT, SIGCLD, SIGQUIT.

A non-zero exit code is returned if  **socket** terminates due to an error condition or a signal.

## SEE ALSO

[**ip**(7)](/ip/7.md), [**tcp**(7)](/tcp/7.md), [**unix**(7)](/unix/7.md), [**accept**(2)](/accept/2.md), [**bind**(2)](/bind/2.md), [**listen**(2)](/listen/2.md), [**connect**(2)](/connect/2.md), [**socket**(2)](/socket/2.md), [**gethostbyname**(3)](/gethostbyname/3.md), [**getservbyname**(3)](/getservbyname/3.md)

## BUGS

`socket -p` terminates due to a SIGPIPE signal when there is more data from the socket available than the executed program wants to read.

Please report any other bugs to the author.

## VERSION

This manual page describes Socket-1.1.

## AUTHOR

Juergen Nickelsen \<nickel@cs.tu-berlin.de\>
