28 if (
arg->remote.res) {
43init_inetsock_internal(
VALUE v)
49 int fd, status = 0, local = 0;
51 const char *syscall = 0;
62 family, SOCK_STREAM, 0);
66 for (res =
arg->remote.res->ai; res; res = res->
ai_next) {
67#if !defined(INET6) && defined(AF_INET6)
73 for (lres =
arg->local.res->ai; lres; lres = lres->
ai_next) {
82 lres =
arg->local.res->ai;
86 syscall =
"socket(2)";
94#if !defined(_WIN32) && !defined(__CYGWIN__)
96 setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
97 (
char*)&status, (
socklen_t)
sizeof(status));
104#if !defined(_WIN32) && !defined(__CYGWIN__)
106 setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
107 (
char*)&status, (
socklen_t)
sizeof(status));
117 syscall =
"connect(2)";
133 host =
arg->local.host;
134 port =
arg->local.serv;
136 host =
arg->remote.host;
137 port =
arg->remote.serv;
164 arg.remote.host = remote_host;
165 arg.remote.serv = remote_serv;
167 arg.local.host = local_host;
168 arg.local.serv = local_serv;
176static ID id_numeric, id_hostname;
181#define return_norevlookup(x) {*norevlookup = (x); return 1;}
196#undef return_norevlookup
213 if (fptr && fptr->
fd >= 0 &&
214 getsockname(fptr->
fd, &addr.
addr, &
len) >= 0 &&
217 char hbuf[1024], pbuf[1024];
271 if (getsockname(fptr->
fd, &addr.
addr, &
len) < 0)
312 if (getpeername(fptr->
fd, &addr.
addr, &
len) < 0)
ID rsock_intern_family(int val)
char str[HTML_ESCAPE_MAX_LEN+1]
VALUE rb_define_class(const char *, VALUE)
Defines a top-level class.
void rb_undef_method(VALUE, const char *)
void rb_syserr_fail(int e, const char *mesg)
void rb_raise(VALUE exc, const char *fmt,...)
VALUE rb_ensure(VALUE(*)(VALUE), VALUE, VALUE(*)(VALUE), VALUE)
An equivalent to ensure clause.
void rb_sys_fail(const char *mesg)
#define GetOpenFile(obj, fp)
void rsock_init_ipsocket(void)
#define return_norevlookup(x)
VALUE rsock_init_inetsock(VALUE sock, VALUE remote_host, VALUE remote_serv, VALUE local_host, VALUE local_serv, int type)
int rsock_revlookup_flag(VALUE revlookup, int *norevlookup)
VALUE type(ANYARGS)
ANYARGS-ed function type.
void rb_freeaddrinfo(struct rb_addrinfo *ai)
VALUE rsock_make_ipaddr(struct sockaddr *addr, socklen_t addrlen)
struct rb_addrinfo * rsock_addrinfo(VALUE host, VALUE port, int family, int socktype, int flags)
VALUE rsock_ipaddr(struct sockaddr *sockaddr, socklen_t sockaddrlen, int norevlookup)
int rb_getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags)
#define FMODE_NOREVLOOKUP
int rsock_socket(int domain, int type, int proto)
VALUE rsock_init_sock(VALUE sock, int fd)
VALUE rsock_s_recvfrom(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from)
int rsock_connect(int fd, const struct sockaddr *sockaddr, int len, int socks)
void rsock_syserr_fail_host_port(int err, const char *mesg, VALUE host, VALUE port)
struct sockaddr * ai_addr
struct addrinfo * ai_next
struct inetsock_arg::@133 local
struct inetsock_arg::@133 remote