Feature #11298 ยป 0001-socket-memoize-common-socket-families-in-fptr-mode.patch
ext/socket/ancdata.c | ||
---|---|---|
GetOpenFile(sock, fptr);
|
||
#if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL)
|
||
family = rsock_getfamily(fptr->fd);
|
||
family = rsock_getfamily(fptr);
|
||
#endif
|
||
data = vflags = dest_sockaddr = Qnil;
|
||
... | ... | |
);
|
||
#if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL)
|
||
family = rsock_getfamily(fptr->fd);
|
||
family = rsock_getfamily(fptr);
|
||
if (mh.msg_controllen) {
|
||
char *msg_end = (char *)mh.msg_control + mh.msg_controllen;
|
||
for (cmh = CMSG_FIRSTHDR(&mh); cmh != NULL; cmh = CMSG_NXTHDR(&mh, cmh)) {
|
ext/socket/basicsocket.c | ||
---|---|---|
}
|
||
GetOpenFile(sock, fptr);
|
||
family = rsock_getfamily(fptr->fd);
|
||
family = rsock_getfamily(fptr);
|
||
level = rsock_level_arg(family, lev);
|
||
option = rsock_optname_arg(family, level, optname);
|
||
... | ... | |
int family;
|
||
GetOpenFile(sock, fptr);
|
||
family = rsock_getfamily(fptr->fd);
|
||
family = rsock_getfamily(fptr);
|
||
level = rsock_level_arg(family, lev);
|
||
option = rsock_optname_arg(family, level, optname);
|
||
len = 256;
|
ext/socket/init.c | ||
---|---|---|
}
|
||
int
|
||
rsock_getfamily(int sockfd)
|
||
rsock_getfamily(rb_io_t *fptr)
|
||
{
|
||
union_sockaddr ss;
|
||
socklen_t sslen = (socklen_t)sizeof(ss);
|
||
int cached = fptr->mode & FMODE_SOCK;
|
||
if (cached) {
|
||
switch (cached) {
|
||
#ifdef AF_UNIX
|
||
case FMODE_UNIX: return AF_UNIX;
|
||
#endif
|
||
case FMODE_INET: return AF_INET;
|
||
case FMODE_INET6: return AF_INET6;
|
||
}
|
||
}
|
||
ss.addr.sa_family = AF_UNSPEC;
|
||
if (getsockname(sockfd, &ss.addr, &sslen) < 0)
|
||
if (getsockname(fptr->fd, &ss.addr, &sslen) < 0)
|
||
return AF_UNSPEC;
|
||
switch (ss.addr.sa_family) {
|
||
#ifdef AF_UNIX
|
||
case AF_UNIX: fptr->mode |= FMODE_UNIX; break;
|
||
#endif
|
||
case AF_INET: fptr->mode |= FMODE_INET; break;
|
||
case AF_INET6: fptr->mode |= FMODE_INET6; break;
|
||
}
|
||
return ss.addr.sa_family;
|
||
}
|
||
ext/socket/rubysocket.h | ||
---|---|---|
extern int rsock_cmsg_cloexec_state;
|
||
#define FMODE_NOREVLOOKUP 0x100
|
||
/* common socket families only */
|
||
#define FMODE_UNIX 0x00200000
|
||
#define FMODE_INET 0x00400000
|
||
#define FMODE_INET6 0x00800000
|
||
#define FMODE_SOCK (FMODE_UNIX|FMODE_INET|FMODE_INET6)
|
||
extern VALUE rb_cBasicSocket;
|
||
extern VALUE rb_cIPSocket;
|
||
extern VALUE rb_cTCPSocket;
|
||
... | ... | |
int rsock_cmsg_type_arg(int family, int level, VALUE type);
|
||
int rsock_shutdown_how_arg(VALUE how);
|
||
int rsock_getfamily(int sockfd);
|
||
int rsock_getfamily(rb_io_t *fptr);
|
||
struct rb_addrinfo {
|
||
struct addrinfo *ai;
|
include/ruby/io.h | ||
---|---|---|
#define FMODE_TEXTMODE 0x00001000
|
||
/* #define FMODE_PREP 0x00010000 */
|
||
#define FMODE_SETENC_BY_BOM 0x00100000
|
||
/* #define FMODE_UNIX 0x00200000 */
|
||
/* #define FMODE_INET 0x00400000 */
|
||
/* #define FMODE_INET6 0x00800000 */
|
||
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
|
||
-
|