2 #define RUBY_SOCKET_H 1
25 #if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE)
26 # include <net/socket.h>
28 # include <sys/socket.h>
30 #include <netinet/in.h>
31 #ifdef HAVE_NETINET_IN_SYSTM_H
32 # include <netinet/in_systm.h>
34 #ifdef HAVE_NETINET_TCP_H
35 # include <netinet/tcp.h>
37 #ifdef HAVE_NETINET_UDP_H
38 # include <netinet/udp.h>
40 #ifdef HAVE_ARPA_INET_H
41 # include <arpa/inet.h>
50 #if defined(HAVE_FCNTL)
51 #ifdef HAVE_SYS_SELECT_H
52 #include <sys/select.h>
54 #ifdef HAVE_SYS_TYPES_H
55 #include <sys/types.h>
57 #ifdef HAVE_SYS_TIME_H
68 #ifdef HAVE_SYS_IOCTL_H
69 #include <sys/ioctl.h>
71 #ifdef HAVE_SYS_SOCKIO_H
72 #include <sys/sockio.h>
78 #ifdef HAVE_SYS_PARAM_H
79 #include <sys/param.h>
81 #ifdef HAVE_SYS_UCRED_H
82 #include <sys/ucred.h>
89 #define EWOULDBLOCK EAGAIN
99 #define pseudo_AF_FTIP pseudo_AF_RTIP
101 #ifndef HAVE_GETADDRINFO
107 # define NI_MAXHOST 1025
110 # define NI_MAXSERV 32
114 # define IS_IP_FAMILY(af) ((af) == AF_INET || (af) == AF_INET6)
116 # define IS_IP_FAMILY(af) ((af) == AF_INET)
119 #ifndef HAVE_SOCKADDR_STORAGE
123 #define _SS_MAXSIZE 128
124 #define _SS_ALIGNSIZE (sizeof(double))
125 #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(unsigned char) * 2)
126 #define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(unsigned char) * 2 - \
127 _SS_PAD1SIZE - _SS_ALIGNSIZE)
131 unsigned char ss_len;
142 #if defined __APPLE__ && defined __MACH__
148 #undef __DARWIN_ALIGNBYTES
149 #define __DARWIN_ALIGNBYTES (sizeof(unsigned int) - 1)
154 # define CMSG_SPACE(len) (_CMSG_ALIGN(sizeof(struct cmsghdr)) + _CMSG_ALIGN(len))
157 # define CMSG_LEN(len) (_CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
163 #define close closesocket
166 #define INET_CLIENT 0
167 #define INET_SERVER 1
171 #define FMODE_NOREVLOOKUP 0x100
179 extern VALUE rb_cUNIXSocket;
180 extern VALUE rb_cUNIXServer;
189 extern VALUE rb_cSOCKSSocket;
198 #include "constdefs.h"
200 #define BLOCKING_REGION(func, arg) (long)rb_thread_blocking_region((func), (arg), RUBY_UBF_IO, 0)
201 #define BLOCKING_REGION_FD(func, arg) (long)rb_thread_io_blocking_region((func), (arg), (arg)->fd)
203 #define SockAddrStringValue(v) rsock_sockaddr_string_value(&(v))
204 #define SockAddrStringValuePtr(v) rsock_sockaddr_string_value_ptr(&(v))
221 int rb_getnameinfo(
const struct sockaddr *sa, socklen_t salen,
char *host,
size_t hostlen,
char *serv,
size_t servlen,
int flags);
236 VALUE rsock_unixpath_str(
struct sockaddr_un *sockaddr, socklen_t
len);
237 VALUE rsock_unixaddr(
struct sockaddr_un *sockaddr, socklen_t
len);
238 socklen_t rsock_unix_sockaddr_len(
VALUE path);
268 int rsock_connect(
int fd,
const struct sockaddr *sockaddr,
int len,
int socks);
276 #if defined(HAVE_SENDMSG)
280 #define rsock_bsock_sendmsg rb_f_notimplement
281 #define rsock_bsock_sendmsg_nonblock rb_f_notimplement
283 #if defined(HAVE_RECVMSG)
287 #define rsock_bsock_recvmsg rb_f_notimplement
288 #define rsock_bsock_recvmsg_nonblock rb_f_notimplement
291 #ifdef HAVE_ST_MSG_CONTROL
292 void rsock_discard_cmsg_resource(
struct msghdr *mh,
int msg_peek_p);