*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> socket (2)              



NAME    [Toc]    [Back]

     socket - create an endpoint for communication

SYNOPSIS    [Toc]    [Back]

     #include <sys/types.h>
     #include <sys/socket.h>

     socket(int domain, int type, int protocol);

DESCRIPTION    [Toc]    [Back]

     socket() creates an endpoint for communication and returns a

     The domain parameter specifies a communications domain within which communication
 will take place; this selects the protocol family
which should
     be  used.   These  families  are defined in the include file
     The currently understood formats are

           AF_UNIX         (UNIX internal protocols),
           AF_INET         (ARPA Internet protocols),
           AF_INET6        (ARPA IPv6 protocols),
           AF_ISO          (ISO protocols),
           AF_NS           (Xerox Network Systems protocols),
           AF_IPX          (Internetwork Packet Exchange), and
           AF_IMPLINK      (IMP host at IMP link layer).

     The socket has the indicated type, which specifies  the  semantics of communication.
  Currently defined types are:


     A  SOCK_STREAM  type  provides  sequenced, reliable, two-way
connection based
     byte streams.  An out-of-band  data  transmission  mechanism
may be supported.
  A SOCK_DGRAM socket supports datagrams (connectionless,
     messages of a fixed (typically small)  maximum  length).   A
     socket  may  provide  a sequenced, reliable, two-way connection-based data
     transmission path for datagrams of fixed maximum  length;  a
consumer may
     be  required  to read an entire packet with each read system
call.  This
     facility is protocol specific, and presently implemented only for PF_NS.
     SOCK_RAW  sockets  provide access to internal network protocols and interfaces.
  The types SOCK_RAW, which is available only  to  the
superuser, and
     SOCK_RDM, which is planned, but not yet implemented, are not

     The protocol specifies a particular protocol to be used with
the socket.
     Normally only a single protocol exists to support a particular socket
     type within a given protocol family.  However, it is  possible that many
     protocols  may  exist,  in  which case a particular protocol
must be specified
 in this manner.  The protocol number to use is particular to the
     communication  domain  in  which  communication  is  to take
place; see
     protocols(5).  A value of 0 for protocol will let the system
select an
     appropriate protocol for the requested socket type.

     Sockets of type SOCK_STREAM are full-duplex byte streams.  A
stream socket
 must be in a connected state before any data may be  sent
or received
     on  it.   A  connection  to another socket is created with a
connect(2) call.
     Once connected, data may be transferred  using  read(2)  and
write(2) calls
     or  some  variant  of the send(2) and recv(2) calls.  When a
session has
     been completed a close(2) may be performed.  Out-of-band data may also be
     transmitted  as  described  in  send(2)  and received as described in recv(2).

     The communications protocols used to implement a SOCK_STREAM
ensure that
     data  is  not  lost  or  duplicated.  If a piece of data for
which the peer
     protocol has buffer space cannot be successfully transmitted
within a
     reasonable length of time, then the connection is considered
broken and
     calls will indicate  an  error  with  -1  returns  and  with
     specific  code  in the global variable errno.  The protocols
     keep sockets ``warm'' by forcing transmissions roughly every
minute in
     the  absence  of other activity.  An error is then indicated
if no response
     can be elicited on an otherwise idle connection for  an  extended period
     (e.g.,  5 minutes).  A SIGPIPE signal is raised if a process
sends on a
     broken stream; this causes naive  processes,  which  do  not
handle the signal,
 to exit.

     SOCK_SEQPACKET  sockets  employ  the  same  system  calls as
SOCK_STREAM sockets.
  The only difference is that read(2) calls will  return
only the
     amount  of data requested, and any remaining in the arriving
packet will
     be discarded.

     SOCK_DGRAM and SOCK_RAW sockets allow sending  of  datagrams
to correspondents
  named  in send(2) calls.  Datagrams are generally received with
     recvfrom(2), which returns the next datagram with its return

     An  fcntl(2)  call can be used to specify a process group to
receive a
     SIGURG signal when the out-of-band data arrives.  It may also enable nonblocking
 I/O and asynchronous notification of I/O events via

     The operation of  sockets  is  controlled  by  socket  level
options.  These
     options  are  defined  in the file <sys/socket.h>.  setsockopt(2) and
     getsockopt(2) are used to set and get options, respectively.

RETURN VALUES    [Toc]    [Back]

     A  -1  is  returned if an error occurs, otherwise the return
value is a descriptor
 referencing the socket.

ERRORS    [Toc]    [Back]

     The socket() call fails if:

                   The protocol type or the specified protocol is
not supported
 within this domain.

     [EMFILE]      The per-process descriptor table is full.

     [ENFILE]      The system file table is full.

     [EACCES]      Permission to create a socket of the specified
type and/or
                   protocol is denied.

     [ENOBUFS]     Insufficient buffer space is  available.   The
socket cannot
                   be  created  until  sufficient  resources  are

SEE ALSO    [Toc]    [Back]

     accept(2),  bind(2),  connect(2),  getsockname(2),  getsockopt(2), ioctl(2),
     listen(2),  poll(2),  read(2),  recv(2), select(2), send(2),
     shutdown(2), socketpair(2), write(2),  getprotoent(3),  netintro(4)

     An Introductory 4.3 BSD Interprocess Communication Tutorial,
reprinted in
     UNIX Programmer's Supplementary Documents Volume 1.

     BSD Interprocess Communication Tutorial, reprinted  in  UNIX
     Supplementary Documents Volume 1.

HISTORY    [Toc]    [Back]

     The socket() function call appeared in 4.2BSD.

OpenBSD      3.6                           June      4,      1993
[ Back ]
 Similar pages
Name OS Title
ttdt_open HP-UX create a ToolTalk communication endpoint
ttdt_close HP-UX destroy a ToolTalk communication endpoint
pipe OpenBSD create descriptor pair for interprocess communication
socket Tru64 Create an end point for communication and return a descriptor
pipe NetBSD create descriptor pair for interprocess communication
pipe FreeBSD create descriptor pair for interprocess communication
dcecp_endpoint HP-UX A dcecp object that manages endpoint information in local RPC endpoint maps
t6get_endpt_mask IRIX get or set endpoint security attribute mask, get or set endpoint default security attributes
t_close IRIX close a transport endpoint
t_close Tru64 Close a transport endpoint.
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service