# pydoc > socket

---
type: CommandReference
command: socket
mode: pydoc
section: 
source: pydoc3
---

## Quick Reference
- `socket()` — create a new socket
- `socket.create_connection(address, timeout=..., source_address=...)` — connect to a TCP server
- `socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)` — resolve host and port
- `socket.gethostbyname(hostname)` — get IPv4 address from hostname
- `socket.gethostname()` — get local hostname
- `socket.inet_aton(ip_string)` — convert IP string to packed 32-bit binary
- `socket.inet_ntoa(packed_ip)` — convert packed binary to IP string
- `sock.bind(address)` — bind socket to address
- `sock.listen(backlog)` — listen for incoming connections
- `sock.accept()` — accept connection, return (conn, address)
- `sock.connect(address)` — connect to remote address
- `sock.send(data)` — send data
- `sock.recv(bufsize)` — receive data

## Name
Low-level socket operations and related functions.

## Synopsis
python
import socket
Provides access to the BSD socket interface. On Unix, supports IP and Unix domain sockets; on other systems, only IP.

## Options

### Functions
- `socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)` — create a new socket
- `socketpair(family=AF_UNIX, type=SOCK_STREAM, proto=0)` — create a pair of connected sockets
- `create_connection(address, timeout=None, source_address=None)` — connect to a TCP server
- `create_server(address, family=AF_INET, backlog=None, reuse_port=False, dualstack_ipv6=False)` — create a TCP server socket
- `getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)` — resolve host/port into list of address info tuples
- `gethostbyname(hostname)` — return the IPv4 address of a host
- `gethostbyname_ex(hostname)` — return (hostname, aliaslist, ipaddrlist)
- `gethostname()` — return the current host name
- `getfqdn(name='')` — return fully qualified domain name
- `gethostbyaddr(ip_address)` — return (hostname, aliaslist, ipaddrlist) for an IP address
- `getservbyname(servicename, protocolname='tcp')` — return port number for a service
- `getprotobyname(protocolname)` — return protocol number
- `inet_aton(ip_string)` — convert IPv4 address string to 32-bit packed binary
- `inet_ntoa(packed_ip)` — convert 32-bit packed binary to IPv4 address string
- `inet_pton(address_family, ip_string)` — convert IP address string to packed binary (IPv4 or IPv6)
- `inet_ntop(address_family, packed_ip)` — convert packed binary to IP address string
- `ntohl(integer)` — convert 32-bit integer from network to host byte order
- `ntohs(integer)` — convert 16-bit integer from network to host byte order
- `htonl(integer)` — convert 32-bit integer from host to network byte order
- `htons(integer)` — convert 16-bit integer from host to network byte order
- `setdefaulttimeout(timeout)` — set default timeout for new sockets
- `getdefaulttimeout()` — get default timeout

### Class: `socket` (important methods)
- `bind(address)` — bind to local address
- `listen(backlog)` — enable server to accept connections
- `accept()` — accept a connection, return (conn, address)
- `connect(address)` — connect to a remote address
- `connect_ex(address)` — like connect but returns error code
- `close()` — close the socket
- `send(data, flags=0)` — send data, return bytes sent
- `sendall(data, flags=0)` — send all data, blocking
- `sendto(data, flags, address)` — send data to a specific address
- `recv(bufsize, flags=0)` — receive data, return bytes
- `recvfrom(bufsize, flags=0)` — receive data and sender address
- `recv_into(buffer, nbytes=0, flags=0)` — receive data into buffer
- `recvfrom_into(buffer, nbytes=0, flags=0)` — receive data and sender address into buffer
- `recvmsg(bufsize, ancbufsize=0, flags=0)` — receive data and ancillary data (control messages)
- `sendmsg(buffers, ancdata=(), flags=0, address=None)` — send data and ancillary data
- `settimeout(timeout)` — set timeout in seconds (float) or None to disable
- `gettimeout()` — return timeout
- `setblocking(flag)` — set blocking (True) or non‑blocking (False)
- `getblocking()` — return blocking state
- `setsockopt(level, optname, value)` — set socket option
- `getsockopt(level, optname, buflen=0)` — get socket option
- `fileno()` — return file descriptor
- `getpeername()` — return remote address
- `getsockname()` — return local address
- `shutdown(how)` — shut down read, write, or both
- `makefile(mode='r', buffering=None, ...)` — return file‑like object for socket
- `sendfile(file, offset=0, count=None)` — send file using `os.sendfile` (SOCK_STREAM only)

### Constants (selected)
- Address families: `AF_INET`, `AF_INET6`, `AF_UNIX`, `AF_UNSPEC`, `AF_PACKET`, `AF_CAN`, `AF_BLUETOOTH`, `AF_NETLINK`, `AF_VSOCK`
- Socket types: `SOCK_STREAM`, `SOCK_DGRAM`, `SOCK_RAW`, `SOCK_RDM`, `SOCK_SEQPACKET`, `SOCK_NONBLOCK`, `SOCK_CLOEXEC`
- Shutdown: `SHUT_RD`, `SHUT_WR`, `SHUT_RDWR`
- Message flags: `MSG_OOB`, `MSG_PEEK`, `MSG_DONTROUTE`, `MSG_WAITALL`, `MSG_MORE`, `MSG_DONTWAIT`, `MSG_CONFIRM`, `MSG_NOSIGNAL`, `MSG_CMSG_CLOEXEC`, `MSG_ERRQUEUE`, `MSG_FASTOPEN`
- Protocol levels: `SOL_SOCKET`, `SOL_IP`, `SOL_TCP`, `SOL_UDP`, `SOL_CAN_RAW`, `SOL_RDS`, `SOL_TIPC`, `SOL_ALG`
- Socket options: `SO_REUSEADDR`, `SO_REUSEPORT`, `SO_KEEPALIVE`, `SO_BROADCAST`, `SO_LINGER`, `SO_RCVBUF`, `SO_SNDBUF`, `SO_RCVTIMEO`, `SO_SNDTIMEO`, `SO_TYPE`, `SO_ERROR`, `SO_DEBUG`, `SO_DONTROUTE`, `SO_OOBINLINE`, `SO_PASSCRED`, `SO_PEERCRED`
- IP options: `IP_MULTICAST_TTL`, `IP_MULTICAST_LOOP`, `IP_ADD_MEMBERSHIP`, `IP_DROP_MEMBERSHIP`, `IP_TTL`, `IP_TOS`, `IP_HDRINCL`
- TCP options: `TCP_NODELAY`, `TCP_CORK`, `TCP_DEFER_ACCEPT`, `TCP_KEEPIDLE`, `TCP_KEEPINTVL`, `TCP_KEEPCNT`, `TCP_FASTOPEN`, `TCP_MAXSEG`
- Special addresses: `INADDR_ANY`, `INADDR_BROADCAST`, `INADDR_LOOPBACK`, `INADDR_NONE`
- Exceptions: `error` (alias for `OSError`), `herror`, `gaierror`, `timeout` (alias for `TimeoutError`)

## Examples

### TCP echo server using `create_server`
python
from socket import create_server

with create_server(('', 8000)) as server:
    while True:
        conn, addr = server.accept()
        with conn:
            data = conn.recv(1024)
            conn.sendall(data)
### Simple TCP client with `create_connection`
python
from socket import create_connection

with create_connection(('localhost', 8000)) as sock:
    sock.sendall(b'Hello, world')
    response = sock.recv(1024)
## See Also
- [select](https://docs.python.org/3/library/select.html) — Wait for I/O completion on multiple streams
- [ssl](https://docs.python.org/3/library/ssl.html) — TLS/SSL wrapper for socket objects
- [asyncio](https://docs.python.org/3/library/asyncio.html) — Asynchronous I/O framework
- [http.client](https://docs.python.org/3/library/http.client.html) — HTTP protocol client
- [urllib.request](https://docs.python.org/3/library/urllib.request.html) — Extensible library for opening URLs
- [socketserver](https://docs.python.org/3/library/socketserver.html) — Framework for network servers
