| 
 | 
  | 
 
  
  C Interface
  
 AF_UNIX only:
   #include <sys/types.h>
   #include <sys/socket.h>
   #include <sys/un.h>
   int bind (s, addr, addrlen)
   int s;
   struct sockaddr_un *addr;
   int addrlen;
 AF_INET only:
   #include <sys/types.h>
   #include <sys/socket.h>
   #include <netinet/in.h>
   int bind (s, addr, addrlen)
   int s;
   struct sockaddr_in *addr;
   int addrlen;
   
  Description
  The bind system call assigns an address to an unbound socket. When a
  socket is created with socket, it exists in an address space (address
  family) but has no address assigned. The bind call causes the socket
  whose descriptor is s to become bound to the address specified
  in the socket address structure pointed to by addr. The
  addrlen parameter must specify the size of the address
  structure. Since the size of the socket address structure varies between
  socket address families (16 bytes for AF_INET; 110 bytes for
  AF_UNIX), the correct socket address structure should be used with
  each address family (struct sockaddr_in for AF_INET;
  struct sockaddr_un for AF_UNIX).
  
  Here is the socket address structure for AF_INET, extracted from the
  IN.H.SYS file:
   
   struct in_addr {
      union {
         struct { u_char s_b1,s_b2,s_b3,s_b4; } s_un_b;
         struct { u_short s_w1,s_w2; } S_un_w;
         u_long S_addr;
      } S_un;
   #define  s_addr   S_un.S_addr /* can be used for most tcp & ip code 
   */
   #define  s_host   S_un.S_un_b.s_b2     /* host on imp  */
   #define  s_net    S_un.S_un_b.s_b1     /* network      */
   #define  s_imp    S_un.S_un_w.s_w2     /* imp          */
   #define  s_impno  S_un.S_un_b.s_b4     /* imp #        */
   #define  s_lh     S_un.S_un_b.s_b3     /* logical host */
   };
   #define     INADDR_ANY        (u_long)0x00000000
   #define     INADDR_THISHOST   (u_long)0x00000000
   struct sockaddr_in {
      short    sin_family;
      u_short  sin_port;
      struct   in_addr sin_addr;
      char     sin_zero[8];
   };
  
  Here is the socket address structure for AF_UNIX, extracted from the
  UN.H.SYS file:
  
   struct  sockaddr_un {
      short sun_family;         /* AF_UNIX         */
      char  sun_path[108];      /* path name       */
   };
  
  Examples
  Here is an example program to create and bind an AF_UNIX socket:
  
   #include <sys/types.h>
   #include <sys/socket.h>
   #include <sys/errno.h>
   #include <sys/un.h>
   main ()
   {
      int s;
      int af, type, protocol;
      struct sockaddr_un addr;
      int addrlen;
      s = socket (AF_UNIX, SOCK_STREAM, 0);
      addr.sun_family = AF_UNIX;
      strcpy (addr.sun_path, "tmp/socket");
      addrlen = 110;
      bind (s,addr, addrlen);
   }
  
  Return Value
  If the bind is successful, a 0 value is returned. If it fails, -1 is
  returned, and an error code is stored in errno.
  Errors
  The following errors are returned by bind:
    
  
  
  | Error Code | 
  Description |  
  
  
    | [EBADF] | 
    The argument s is not a valid descriptor. |  
  
    | [ENOTSOCK] | 
    The argument s is not a socket. |  
  
    | [EADDRNOTAVAIL] | 
    The specified address is bad or is not available from the local
        machine. |  
  
    | [EADDRINUSE] | 
    The specified address is already in use. |  
  
    | [EINVAL] | 
    The socket is already bound to an address, the socket has been shut
        down or addrlen is a bad value. |  
  
    | [EAFNOSUPPORT] | 
    The requested address does not match the address family of this socket.
         |  
  
    | [EACCES] | 
    The requested address is protected, and the current user has
        inadequate permission to access it. (This error can be returned by
        AF_INET only.) |  
  
    | [EFAULT] | 
    The addr parameter is not a valid pointer. |  
  
    | [EOPNOTSUPP] | 
    The socket whose descriptor is s is of a type that does
        not support address binding. |  
  
    | [ENOBUFS] | 
    Insufficient buffer memory is available. The bind cannot
        complete. |  
  
    | [EDESTADDREQ] | 
    No addr parameter was specified. |  
  
    | [ENETUNREACH] | 
    The network is not reachable from this host. |  
  
   
  
  MPE/iX Specific
  On HP-UX, when binding an AF_UNIX socket to a path name (such as
  /tmp/mysocket, an open file having that name is created in the file
  system. When the bound socket is closed, that file still exists unless it is
  removed or unlinked. This does not occur on MPE/iX (that is, no file is
  created).
    
  On HP-UX, you are allowed to specify a specific network while binding. MPE/iX
  does not. The IP address portion of sockaddr for
  AF_INET must be zero.
  Author
  UCB (University of California at Berkeley)
  See Also
  
  connect,
  listen,
  socket,
  getsockname,
  Name Service Routines
  
  
 
 |