Maintenance Ruby 3.4 gets fixes, but no new features. Switch to Ruby 4.0 →
Socket#connect
static VALUE
sock_connect(VALUE self, VALUE addr)
{
VALUE rai;
SockAddrStringValueWithAddrinfo(addr, rai);
addr = rb_str_new4(addr);
int result = rsock_connect(self, (struct sockaddr*)RSTRING_PTR(addr), RSTRING_SOCKLEN(addr), 0, RUBY_IO_TIMEOUT_DEFAULT);
if (result < 0) {
rsock_sys_fail_raddrinfo_or_sockaddr("connect(2)", addr, rai);
}
return INT2FIX(result);
}
Requests a connection to be made on the given remote_sockaddr. Returns 0 if successful, otherwise an exception is raised.
Parameter
-
remote_sockaddr- thestructsockaddr contained in a string orAddrinfoobject
Example:
# Pull down Google's web page require 'socket' include Socket::Constants socket = Socket.new( AF_INET, SOCK_STREAM, 0 ) sockaddr = Socket.pack_sockaddr_in( 80, 'www.google.com' ) socket.connect( sockaddr ) socket.write( "GET / HTTP/1.0\r\n\r\n" ) results = socket.read
Unix-based Exceptions
On unix-based systems the following system exceptions may be raised if the call to connect fails:
-
Errno::EACCES- search permission is denied for a component of the prefix path or write access to thesocketis denied -
Errno::EADDRINUSE- the sockaddr is already in use -
Errno::EADDRNOTAVAIL- the specified sockaddr is not available from the local machine -
Errno::EAFNOSUPPORT- the specified sockaddr is not a valid address for the address family of the specifiedsocket -
Errno::EALREADY- a connection is already in progress for the specified socket -
Errno::EBADF- thesocketis not a valid file descriptor -
Errno::ECONNREFUSED- the target sockaddr was not listening for connections refused the connection request -
Errno::ECONNRESET- the remote host reset the connection request -
Errno::EFAULT- the sockaddr cannot be accessed -
Errno::EHOSTUNREACH- the destination host cannot be reached (probably because the host is down or a remote router cannot reach it) -
Errno::EINPROGRESS- the O_NONBLOCK is set for thesocketand the connection cannot be immediately established; the connection will be established asynchronously -
Errno::EINTR- the attempt to establish the connection was interrupted by delivery of a signal that was caught; the connection will be established asynchronously -
Errno::EISCONN- the specifiedsocketis already connected -
Errno::EINVAL- the address length used for the sockaddr is not a valid length for the address family or there is an invalid family in sockaddr -
Errno::ENAMETOOLONG- the pathname resolved had a length which exceeded PATH_MAX -
Errno::ENETDOWN- the local interface used to reach the destination is down -
Errno::ENETUNREACH- no route to the network is present -
Errno::ENOBUFS- no buffer space is available -
Errno::ENOSR- there were insufficient STREAMS resources available to complete the operation -
Errno::ENOTSOCK- thesocketargument does not refer to a socket -
Errno::EOPNOTSUPP- the callingsocketis listening and cannot be connected -
Errno::EPROTOTYPE- the sockaddr has a different type than the socket bound to the specified peer address -
Errno::ETIMEDOUT- the attempt to connect timed out before a connection was made.
On unix-based systems if the address family of the calling socket is AF_UNIX the follow exceptions may be raised if the call to connect fails:
-
Errno::EIO- an i/o error occurred while reading from or writing to the file system -
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 entire 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
Windows Exceptions
On Windows systems the following system exceptions may be raised if the call to connect fails:
-
Errno::ENETDOWN- the network is down -
Errno::EADDRINUSE- the socket’s local address is already in use -
Errno::EINTR- the socket was cancelled -
Errno::EINPROGRESS- a blocking socket is in progress or the service provider is still processing a callback function. Or a nonblocking connect call is in progress on thesocket. -
Errno::EALREADY- seeErrno::EINVAL -
Errno::EADDRNOTAVAIL- the remote address is not a valid address, such as ADDR_ANY TODO check ADDRANY TOINADDR_ANY -
Errno::EAFNOSUPPORT- addresses in the specified family cannot be used with with thissocket -
Errno::ECONNREFUSED- the target sockaddr was not listening for connections refused the connection request -
Errno::EFAULT- the socket’s internal address or address length parameter is too small or is not a valid part of the user space address -
Errno::EINVAL- thesocketis a listening socket -
Errno::EISCONN- thesocketis already connected -
Errno::ENETUNREACH- the network cannot be reached from this host at this time -
Errno::EHOSTUNREACH- no route to the network is present -
Errno::ENOBUFS- no buffer space is available -
Errno::ENOTSOCK- thesocketargument does not refer to a socket -
Errno::ETIMEDOUT- the attempt to connect timed out before a connection was made. -
Errno::EWOULDBLOCK- the socket is marked as nonblocking and the connection cannot be completed immediately -
Errno::EACCES- the attempt to connect the datagram socket to the broadcast address failed
See
-
connect manual pages on unix-based systems
-
connect function in Microsoft’s Winsock functions reference