bind(p1)
public
Binds to the given struct sockaddr.
Parameter
Example
require 'socket'
include Socket::Constants
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
socket.bind( sockaddr )
Unix-based Exceptions
On unix-based based systems the following system exceptions may be raised
if the call to bind fails:
-
Errno::EACCES - the specified sockaddr is protected and the
current user does not have permission to bind to it
-
Errno::EADDRINUSE - the specified sockaddr is already in use
-
Errno::EADDRNOTAVAIL - the specified sockaddr is not available
from the local machine
-
Errno::EAFNOSUPPORT - the specified sockaddr isnot a valid address
for the family of the calling socket
-
Errno::EBADF - the sockaddr specified is not a valid file
descriptor
-
Errno::EFAULT - the sockaddr argument cannot be accessed
-
Errno::EINVAL - the socket is already bound to an address, and the
protocol does not support binding to the new sockaddr or the
socket has been shut down.
-
Errno::EINVAL - the address length is not a valid length for the address
family
-
Errno::ENAMETOOLONG - the pathname resolved had a length which exceeded
PATH_MAX
-
Errno::ENOBUFS - no buffer space is available
-
Errno::ENOSR - there were insufficient STREAMS resources available to
complete the operation
-
Errno::ENOTSOCK - the socket does not refer to a socket
-
Errno::EOPNOTSUPP - the socket type of the socket does not support
binding to an address
On unix-based based systems if the address family of the calling
socket is Socket::AF_UNIX the follow exceptions may be raised if
the call to bind fails:
-
Errno::EACCES - search permission is denied for a component of the prefix
path or write access to the socket is denided
-
Errno::EDESTADDRREQ - the sockaddr argument is a null pointer
-
Errno::EISDIR - same as Errno::EDESTADDRREQ
-
Errno::EIO - an i/o error occurred
-
Errno::ELOOP - too many symbolic links were encountered in translating the
pathname in sockaddr
-
Errno::ENAMETOOLLONG - a component of a pathname exceeded NAME_MAX
characters, or an entired pathname exceeded PATH_MAX characters
-
Errno::ENOENT - a component of the pathname does not name an existing file
or the pathname is an empty string
-
Errno::ENOTDIR - a component of the path prefix of the pathname in
sockaddr is not a directory
-
Errno::EROFS - the name would reside on a read only filesystem
Windows Exceptions
On Windows systems the following system exceptions may be raised if the
call to bind fails:
-
Errno::ENETDOWN– the network is down
-
Errno::EACCES - the attempt to connect
the datagram socket to the broadcast address failed
-
Errno::EADDRINUSE - the socket’s local address is already in use
-
Errno::EADDRNOTAVAIL - the specified address is not a valid address for
this computer
-
Errno::EFAULT - the socket’s internal address or address length parameter
is too small or is not a valid part of the user space addressed
-
Errno::EINVAL - the socket is already bound to an address
-
Errno::ENOBUFS - no buffer space is available
-
Errno::ENOTSOCK - the socket argument does not refer to a socket
See
Show source
/*
* call-seq:
* socket.bind(server_sockaddr) => 0
*
* Binds to the given +struct+ sockaddr.
*
* === Parameter
* * +server_sockaddr+ - the +struct+ sockaddr contained in a string
*
* === Example
* require 'socket'
* include Socket::Constants
* socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
* sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
* socket.bind( sockaddr )
*
* === Unix-based Exceptions
* On unix-based based systems the following system exceptions may be raised if
* the call to _bind_ fails:
* * Errno::EACCES - the specified _sockaddr_ is protected and the current
* user does not have permission to bind to it
* * Errno::EADDRINUSE - the specified _sockaddr_ is already in use
* * Errno::EADDRNOTAVAIL - the specified _sockaddr_ is not available from the
* local machine
* * Errno::EAFNOSUPPORT - the specified _sockaddr_ isnot a valid address for
* the family of the calling +socket+
* * Errno::EBADF - the _sockaddr_ specified is not a valid file descriptor
* * Errno::EFAULT - the _sockaddr_ argument cannot be accessed
* * Errno::EINVAL - the +socket+ is already bound to an address, and the
* protocol does not support binding to the new _sockaddr_ or the +socket+
* has been shut down.
* * Errno::EINVAL - the address length is not a valid length for the address
* family
* * Errno::ENAMETOOLONG - the pathname resolved had a length which exceeded
* PATH_MAX
* * Errno::ENOBUFS - no buffer space is available
* * Errno::ENOSR - there were insufficient STREAMS resources available to
* complete the operation
* * Errno::ENOTSOCK - the +socket+ does not refer to a socket
* * Errno::EOPNOTSUPP - the socket type of the +socket+ does not support
* binding to an address
*
* On unix-based based systems if the address family of the calling +socket+ is
* Socket::AF_UNIX the follow exceptions may be raised if the call to _bind_
* fails:
* * Errno::EACCES - search permission is denied for a component of the prefix
* path or write access to the +socket+ is denided
* * Errno::EDESTADDRREQ - the _sockaddr_ argument is a null pointer
* * Errno::EISDIR - same as Errno::EDESTADDRREQ
* * Errno::EIO - an i/o error occurred
* * Errno::ELOOP - too many symbolic links were encountered in translating
* the pathname in _sockaddr_
* * Errno::ENAMETOOLLONG - a component of a pathname exceeded NAME_MAX
* characters, or an entired pathname exceeded PATH_MAX characters
* * Errno::ENOENT - a component of the pathname does not name an existing file
* or the pathname is an empty string
* * Errno::ENOTDIR - a component of the path prefix of the pathname in _sockaddr_
* is not a directory
* * Errno::EROFS - the name would reside on a read only filesystem
*
* === Windows Exceptions
* On Windows systems the following system exceptions may be raised if
* the call to _bind_ fails:
* * Errno::ENETDOWN-- the network is down
* * Errno::EACCES - the attempt to connect the datagram socket to the
* broadcast address failed
* * Errno::EADDRINUSE - the socket's local address is already in use
* * Errno::EADDRNOTAVAIL - the specified address is not a valid address for this
* computer
* * Errno::EFAULT - the socket's internal address or address length parameter
* is too small or is not a valid part of the user space addressed
* * Errno::EINVAL - the +socket+ is already bound to an address
* * Errno::ENOBUFS - no buffer space is available
* * Errno::ENOTSOCK - the +socket+ argument does not refer to a socket
*
* === See
* * bind manual pages on unix-based systems
* * bind function in Microsoft's Winsock functions reference
*/
static VALUE
sock_bind(sock, addr)
VALUE sock, addr;
{
rb_io_t *fptr;
StringValue(addr);
GetOpenFile(sock, fptr);
if (bind(fileno(fptr->f), (struct sockaddr*)RSTRING(addr)->ptr, RSTRING(addr)->len) < 0)
rb_sys_fail("bind(2)");
return INT2FIX(0);
}