zoukankan      html  css  js  c++  java
  • linux socket函数

    SOCKET(2)                                                                                                              Linux Programmer's Manual                                                                                                              SOCKET(2)



    NAME
           socket - create an endpoint for communication

       socket函数用来申请一个通信端口。

    SYNOPSIS
           #include <sys/types.h>          /* See NOTES */
           #include <sys/socket.h>

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

    DESCRIPTION
           socket() creates an endpoint for communication and returns a descriptor.

           The domain argument specifies a communication domain; this selects the protocol family which will be used for communication.  These families are defined in <sys/socket.h>.  The currently understood formats include:

    domain defination
           Name                Purpose                          Man page
           AF_UNIX, AF_LOCAL   Local communication              unix(7)
           AF_INET             IPv4 Internet protocols          ip(7)
           AF_INET6            IPv6 Internet protocols          ipv6(7)
           AF_IPX              IPX - Novell protocols
           AF_NETLINK          Kernel user interface device     netlink(7)
           AF_X25              ITU-T X.25 / ISO-8208 protocol   x25(7)
           AF_AX25             Amateur radio AX.25 protocol
           AF_ATMPVC           Access to raw ATM PVCs
           AF_APPLETALK        Appletalk                        ddp(7)
           AF_PACKET           Low level packet interface       packet(7)

    • PF_UNIX、PF_LOCAL、AF_UNIX、AF_LOCAL:这些是Unix进程通信协议。
    • PF_INET、AF_INET:IPv4网络协议。
    • PF_INET6、AF_INT6:IPv6网络协议。
    • PF_IPX、AF_IPX:IPX-Novell协议。
    • PF_NETLINK、AF_NETLINK:核心用户接口装置。
    • PF_X25、AF_X25、ITU-T X.25: ISO-8208协议。


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

    SOCK_STREAM     Provides sequenced, reliable, two-way, connection-based byte streams.  An out-of-band data transmission mechanism may be supported.

                  提供面向连接的稳定数据传输,即TCP协议。

           SOCK_DGRAM      Supports datagrams (connectionless, unreliable messages of a fixed maximum length).

                使用不连续不可靠的数据包连接。

           SOCK_SEQPACKET  Provides a sequenced, reliable, two-way connection-based data transmission path for datagrams of fixed maximum length; a consumer is required to read an entire packet with each input system call. 提供连续可靠的数据包连接。

           SOCK_RAW        Provides raw network protocol access.

           SOCK_RDM        Provides a reliable datagram layer that does not guarantee ordering.

           SOCK_PACKET     Obsolete and should not be used in new programs; see packet(7).

           Some socket types may not be implemented by all protocol families; for example, SOCK_SEQPACKET is not implemented for AF_INET.

           Since Linux 2.6.27, the type argument serves a second purpose: in addition to specifying a socket type, it may include the bitwise OR of any of the following values, to modify the behavior of socket():

           SOCK_NONBLOCK   Set the O_NONBLOCK file status flag on the new open file description.  Using this flag saves extra calls to fcntl(2) to achieve the same result.

           SOCK_CLOEXEC    Set the close-on-exec (FD_CLOEXEC) flag on the new file descriptor.  See the description of the O_CLOEXEC flag in open(2) for reasons why this may be useful.

           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, in which case protocol can be specified as 0.  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 specific to the “communication domain” in which communication is to take place; see protocols(5).  See getprotoent(3) on  how  to
           map protocol name strings to protocol numbers.

           Sockets  of  type  SOCK_STREAM  are full-duplex byte streams, similar to pipes.  They do not preserve record boundaries.  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 which 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 connec?
           tion is considered to be dead.  When SO_KEEPALIVE is enabled on the socket the protocol checks in a protocol-specific manner if the other end is still alive.  A SIGPIPE signal is raised if a process sends or receives 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 data remaining in the arriv?
           ing packet will be discarded.  Also all message boundaries in incoming datagrams are preserved.

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

           SOCK_PACKET is an obsolete socket type to receive raw packets directly from the device driver.  Use packet(7) instead.

           An fcntl(2) F_SETOWN operation can be used to specify a process or process group to receive a SIGURG signal when the out-of-band data arrives or SIGPIPE signal when a SOCK_STREAM connection breaks unexpectedly.  This operation may also be used to  set  the
           process or process group that receives the I/O and asynchronous notification of I/O events via SIGIO.  Using F_SETOWN is equivalent to an ioctl(2) call with the FIOSETOWN or SIOCSPGRP argument.

           When  the network signals an error condition to the protocol module (e.g., using a ICMP message for IP) the pending error flag is set for the socket.  The next operation on this socket will return the error code of the pending error.  For some protocols it
           is possible to enable a per-socket error queue to retrieve detailed information about the error; see IP_RECVERR in ip(7).

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

    RETURN VALUE
           On success, a file descriptor for the new socket is returned.  On error, -1 is returned, and errno is set appropriately.

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

           EAFNOSUPPORT
                  The implementation does not support the specified address family.

           EINVAL Unknown protocol, or protocol family not available.

           EINVAL Invalid flags in type.

           EMFILE Process file table overflow.

           ENFILE The system limit on the total number of open files has been reached.

           ENOBUFS or ENOMEM
                  Insufficient memory is available.  The socket cannot be created until sufficient resources are freed.

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

           Other errors may be generated by the underlying protocol modules.

    CONFORMING TO
           4.4BSD, POSIX.1-2001.

           The SOCK_NONBLOCK and SOCK_CLOEXEC flags are Linux-specific.

           socket() appeared in 4.2BSD.  It is generally portable to/from non-BSD systems supporting clones of the BSD socket layer (including System V variants).

    NOTES
           POSIX.1-2001 does not require the inclusion of <sys/types.h>, and this header file is not required on Linux.  However, some historical (BSD) implementations required this header file, and portable applications are probably wise to include it.

           The manifest constants used under 4.x BSD for protocol families are PF_UNIX, PF_INET, and so on, while AF_UNIX, AF_INET, and so on are used for address families.  However, already the BSD man page promises: "The protocol family generally is the same as the
           address family", and subsequent standards use AF_* everywhere.

    EXAMPLE
           An example of the use of socket() is shown in getaddrinfo(3).

    SEE ALSO
           accept(2), bind(2), connect(2), fcntl(2), getpeername(2), getsockname(2), getsockopt(2), ioctl(2), listen(2), read(2), recv(2), select(2), send(2), shutdown(2), socketpair(2), write(2), getprotoent(3), ip(7), socket(7), tcp(7), udp(7), unix(7)

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

    COLOPHON
           This page is part of release 3.54 of the Linux man-pages project.  A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.

    domain defination

     1 //  /usr/include/bits/socket.h
     2 
     3 /* Protocol families.  */
     4 #define PF_UNSPEC       0       /* Unspecified.  */
     5 #define PF_LOCAL        1       /* Local to host (pipes and file-domain).  */
     6 #define PF_UNIX         PF_LOCAL /* POSIX name for PF_LOCAL.  */
     7 #define PF_FILE         PF_LOCAL /* Another non-standard name for PF_LOCAL.  */
     8 #define PF_INET         2       /* IP protocol family.  */
     9 #define PF_AX25         3       /* Amateur Radio AX.25.  */
    10 #define PF_IPX          4       /* Novell Internet Protocol.  */
    11 #define PF_APPLETALK    5       /* Appletalk DDP.  */
    12 #define PF_NETROM       6       /* Amateur radio NetROM.  */
    13 #define PF_BRIDGE       7       /* Multiprotocol bridge.  */
    14 #define PF_ATMPVC       8       /* ATM PVCs.  */
    15 #define PF_X25          9       /* Reserved for X.25 project.  */
    16 #define PF_INET6        10      /* IP version 6.  */
    17 #define PF_ROSE         11      /* Amateur Radio X.25 PLP.  */
    18 #define PF_DECnet       12      /* Reserved for DECnet project.  */
    19 #define PF_NETBEUI      13      /* Reserved for 802.2LLC project.  */
    20 #define PF_SECURITY     14      /* Security callback pseudo AF.  */
    21 #define PF_KEY          15      /* PF_KEY key management API.  */
    22 #define PF_NETLINK      16
    23 #define PF_ROUTE        PF_NETLINK /* Alias to emulate 4.4BSD.  */
    24 #define PF_PACKET       17      /* Packet family.  */
    25 #define PF_ASH          18      /* Ash.  */
    26 #define PF_ECONET       19      /* Acorn Econet.  */
    27 #define PF_ATMSVC       20      /* ATM SVCs.  */
    28 #define PF_RDS          21      /* RDS sockets.  */
    29 #define PF_SNA          22      /* Linux SNA Project */
    30 #define PF_IRDA         23      /* IRDA sockets.  */
    31 #define PF_PPPOX        24      /* PPPoX sockets.  */
    32 #define PF_WANPIPE      25      /* Wanpipe API sockets.  */
    33 #define PF_LLC          26      /* Linux LLC.  */
    34 #define PF_CAN          29      /* Controller Area Network.  */
    35 #define PF_TIPC         30      /* TIPC sockets.  */
    36 #define PF_BLUETOOTH    31      /* Bluetooth sockets.  */
    37 #define PF_IUCV         32      /* IUCV sockets.  */
    38 #define PF_RXRPC        33      /* RxRPC sockets.  */
    39 #define PF_ISDN         34      /* mISDN sockets.  */
    40 #define PF_PHONET       35      /* Phonet sockets.  */
    41 #define PF_IEEE802154   36      /* IEEE 802.15.4 sockets.  */
    42 #define PF_CAIF         37      /* CAIF sockets.  */
    43 #define PF_ALG          38      /* Algorithm sockets.  */
    44 #define PF_NFC          39      /* NFC sockets.  */
    45 #define PF_VSOCK        40      /* vSockets.  */
    46 #define PF_MAX          41      /* For now..  */
    47 
    48 
    49 /* Address families.  */
    50 #define AF_UNSPEC       PF_UNSPEC
    51 #define AF_LOCAL        PF_LOCAL
    52 #define AF_UNIX         PF_UNIX
    53 #define AF_FILE         PF_FILE
    54 #define AF_INET         PF_INET
    55 #define AF_AX25         PF_AX25
    56 #define AF_IPX          PF_IPX
    57 #define AF_APPLETALK    PF_APPLETALK
    58 #define AF_NETROM       PF_NETROM
    59 #define AF_BRIDGE       PF_BRIDGE
    60 #define AF_ATMPVC       PF_ATMPVC
    61 #define AF_X25          PF_X25
    62 #define AF_INET6        PF_INET6
    63 #define AF_ROSE         PF_ROSE
    64 #define AF_DECnet       PF_DECnet
    65 #define AF_NETBEUI      PF_NETBEUI
    66 #define AF_SECURITY     PF_SECURITY
    67 #define AF_KEY          PF_KEY
    68 #define AF_NETLINK      PF_NETLINK
    69 #define AF_ROUTE        PF_ROUTE
    70 #define AF_PACKET       PF_PACKET
    71 #define AF_ASH          PF_ASH
    72 #define AF_ECONET       PF_ECONET
    73 #define AF_ATMSVC       PF_ATMSVC
    74 #define AF_RDS          PF_RDS
    75 #define AF_SNA          PF_SNA
    76 #define AF_IRDA         PF_IRDA
    77 #define AF_PPPOX        PF_PPPOX
    78 #define AF_WANPIPE      PF_WANPIPE
    79 #define AF_LLC          PF_LLC
    80 #define AF_CAN          PF_CAN
    81 #define AF_TIPC         PF_TIPC
    82 #define AF_BLUETOOTH    PF_BLUETOOTH
    83 #define AF_IUCV         PF_IUCV
    84 #define AF_RXRPC        PF_RXRPC
    85 #define AF_ISDN         PF_ISDN
    86 #define AF_PHONET       PF_PHONET
    87 #define AF_IEEE802154   PF_IEEE802154
    88 #define AF_CAIF         PF_CAIF
    89 #define AF_ALG          PF_ALG
    90 #define AF_NFC          PF_NFC
    91 #define AF_VSOCK        PF_VSOCK
    92 #define AF_MAX          PF_MAX
  • 相关阅读:
    简单工厂,工厂方法,抽象工厂,三种工厂模式
    Redis锁完美解决高并发秒杀问题
    30分钟教你写一个mybatis框架
    List实现队列--杀人游戏
    .Net 事务
    EF架构~为EF DbContext生成的实体添加注释(T5模板应用)
    移动开发规范概述
    Git设置当前分支为默认push分支
    git——简易指南
    .Net内存泄露原因及解决办法
  • 原文地址:https://www.cnblogs.com/merlindu/p/6524758.html
Copyright © 2011-2022 走看看