47 const char *syscall = 0;
61 #if !defined(INET6) && defined(AF_INET6)
66 syscall =
"socket(2)";
73 #if !defined(_WIN32) && !defined(__CYGWIN__)
75 setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
76 (
char*)&status, (socklen_t)
sizeof(status));
90 syscall =
"connect(2)";
108 status = listen(fd, 5);
142 #define return_norevlookup(x) {*norevlookup = (x); return 1;}
157 #undef return_norevlookup
188 socklen_t
len = (socklen_t)
sizeof addr;
195 if (getsockname(fptr->
fd, (
struct sockaddr*)&addr, &len) < 0)
197 return rsock_ipaddr((
struct sockaddr*)&addr, norevlookup);
229 socklen_t
len = (socklen_t)
sizeof addr;
236 if (getpeername(fptr->
fd, (
struct sockaddr*)&addr, &len) < 0)
238 return rsock_ipaddr((
struct sockaddr*)&addr, norevlookup);
struct addrinfo * rsock_addrinfo(VALUE host, VALUE port, int socktype, int flags)
void rb_define_singleton_method(VALUE obj, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a singleton method for obj.
VALUE rsock_ipaddr(struct sockaddr *sockaddr, int norevlookup)
VALUE rsock_init_sock(VALUE sock, int fd)
void rb_raise(VALUE exc, const char *fmt,...)
#define FMODE_NOREVLOOKUP
static VALUE ip_peeraddr(int argc, VALUE *argv, VALUE sock)
void rb_undef_method(VALUE klass, const char *name)
#define GetOpenFile(obj, fp)
VALUE rsock_make_ipaddr(struct sockaddr *addr)
int rsock_socket(int domain, int type, int proto)
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
static VALUE inetsock_cleanup(struct inetsock_arg *arg)
static VALUE init_inetsock_internal(struct inetsock_arg *arg)
VALUE rsock_s_recvfrom(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from)
struct inetsock_arg::@14 remote
void freeaddrinfo(struct addrinfo *ai)
static VALUE ip_s_getaddress(VALUE obj, VALUE host)
register unsigned int len
VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)
void rb_sys_fail(const char *mesg)
static VALUE ip_addr(int argc, VALUE *argv, VALUE sock)
int rsock_revlookup_flag(VALUE revlookup, int *norevlookup)
#define return_norevlookup(x)
int rsock_connect(int fd, const struct sockaddr *sockaddr, int len, int socks)
static VALUE ip_recvfrom(int argc, VALUE *argv, VALUE sock)
struct addrinfo * ai_next
VALUE rsock_init_inetsock(VALUE sock, VALUE remote_host, VALUE remote_serv, VALUE local_host, VALUE local_serv, int type)
void rsock_init_ipsocket(void)
const char * rb_id2name(ID id)
#define rb_intern_const(str)
struct inetsock_arg::@14 local
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
struct sockaddr * ai_addr