|
|
1.1 ! root 1: .TH BIND 2 "27 July 1983" ! 2: .UC 4 ! 3: .SH NAME ! 4: bind \- bind a name to a socket ! 5: .SH SYNOPSIS ! 6: .nf ! 7: .ft B ! 8: #include <sys/types.h> ! 9: #include <sys/socket.h> ! 10: #include <sys/un.h> /* for Unix domain only */ ! 11: #include <netinet/in.h> /* for Internet domain only */ ! 12: .PP ! 13: .ft B ! 14: bind(s, name, namelen) ! 15: int s; ! 16: struct sockaddr *name; ! 17: int namelen; ! 18: .fi ! 19: .SH DESCRIPTION ! 20: .I Bind ! 21: assigns a name to an unnamed socket. ! 22: After being created by the ! 23: .IR socket (2) ! 24: system call, a socket ! 25: exists in a name space (address family) ! 26: but has no name assigned. ! 27: .I Bind ! 28: requests the ! 29: .IR name ! 30: be assigned to the socket. ! 31: Since the system call is applicable to various communication domains, ! 32: the address formats varies. ! 33: .PP ! 34: .I BINDING NAMES TO SOCKETS IN UNIX DOMAIN ! 35: .PP ! 36: The system creates a file of socket type in the file system ! 37: when binding name to a socket. This file must not have existed and ! 38: and must be deleted by the caller when it is no longer ! 39: needed (using ! 40: .IR unlink (2)). ! 41: The file created ! 42: is a side-effect of the current implementation, ! 43: and is not created in future versions ! 44: of the UNIX ipc domain. ! 45: .PP ! 46: The argument ! 47: .I name ! 48: points to the following structure in the file <sys/un.h>: ! 49: ! 50: .RS ! 51: .nf ! 52: struct sockaddr_un { ! 53: short sun_family; ! 54: char sun_path[109]; ! 55: }; ! 56: .fi ! 57: .RE ! 58: ! 59: .I Sun_family ! 60: is set with AF_UNIX, and ! 61: .I sun_path ! 62: is set with the socket name. The name is null terminated if it is ! 63: less than 109 characters. ! 64: .I Namelen ! 65: argument must be at most 111 characters. ! 66: ! 67: .I Notes ! 68: ! 69: The Tahoe C-compiler operator ! 70: .I sizeof(struct sockaddr_un) ! 71: returns 112 (instead of 111!) since it always pads all C-structures ! 72: to make them multiple of long words. As a result, application programmers ! 73: must specify "sizeof(struct sockaddr_un) -1" as the value of the ! 74: .I namelen ! 75: argument when binding in the Unix domain. ! 76: .PP ! 77: .I BINDING NAMES TO SOCKETS IN INTERNET DOMAIN ! 78: .PP ! 79: The argument ! 80: .I namelen ! 81: must be at most 112. ! 82: The argument ! 83: .I name ! 84: points to the following structure in the file <inet/in.h>: ! 85: ! 86: .RS ! 87: .nf ! 88: struct sockaddr_in { ! 89: short sin_family; ! 90: u_short sin_port; ! 91: struct in_addr sin_addr; ! 92: char sin_zero[8]; ! 93: }; ! 94: ! 95: .fi ! 96: .RE ! 97: The field ! 98: .I sin_port ! 99: must be in Internet byte order. ! 100: If the field ! 101: .I sin_addr ! 102: is left unspecified (NULL value), the system will assign a default ! 103: address. If the process reads or writes through a socket without ! 104: binding first, the system will assign that socket a default name. ! 105: .SH "RETURN VALUE ! 106: If the bind is successful, a 0 value is returned. ! 107: A return value of \-1 indicates an error, which is ! 108: further specified in the global \fIerrno\fP. ! 109: .SH ERRORS ! 110: The \fIbind\fP call fails if: ! 111: .TP 20 ! 112: [EBADF] ! 113: \fIS\fP is not a valid descriptor. ! 114: .TP 20 ! 115: [ENOTSOCK] ! 116: \fIS\fP is not a socket. ! 117: .TP 20 ! 118: [EADDRNOTAVAIL] ! 119: The specified address is not available from the local machine. ! 120: .TP 20 ! 121: [EADDRINUSE] ! 122: The specified address is already in use. ! 123: .TP 20 ! 124: [EINVAL] ! 125: The socket is already bound to an address. ! 126: .TP 20 ! 127: [EACCESS] ! 128: The requested address is protected, and the current user ! 129: has inadequate permission to access it. ! 130: .TP 20 ! 131: [EFAULT] ! 132: The \fIname\fP parameter is not in a valid part of the user ! 133: address space. ! 134: .SH SEE ALSO ! 135: connect(2), listen(2), socket(2), getsockname(2). ! 136: The rules used in name binding vary between communication domains. ! 137: Consult the manual entries in section 4 for detailed information.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.