summaryrefslogtreecommitdiff
path: root/ext/socket/rubysocket.h
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-01-17 04:11:27 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-01-17 04:11:27 +0000
commit97cbab78dcc43f696077d3bbce1ee35f9d947339 (patch)
tree7570d3897cbfe9d7b45c077dbf4b760b246243cb /ext/socket/rubysocket.h
parent8ae8afa649e7f59bfddf60dcb9fb844c02b3dc95 (diff)
* ext/socket: split files for each class.
* ext/socket/rubysocket.h: common header. * ext/socket/basicsocket.c: new file for BasicSocket. * ext/socket/ipsocket.c: new file for IPSocket. * ext/socket/tcpsocket.c: new file for TCPSocket. * ext/socket/tcpserver.c: new file for TCPServer. * ext/socket/sockssocket.c: new file for SOCKSSocket. * ext/socket/udpsocket.c: new file for UDPSocket. * ext/socket/unixsocket.c: new file for UNIXSocket. * ext/socket/unixserver.c: new file for UNIXServer. * ext/socket/socket.c: now for Socket. * ext/socket/raddrinfo.c: new file for AddrInfo and name resolution. * ext/socket/constants.c: new file for constants. * ext/socket/init.c: new file for utilities. * ext/socket/mkconstants.rb: export *_to_int. * ext/socket/extconf.rb: add new object files. * ext/socket/depend: add dependencies for new files. * ext/.document: add new files. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21619 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket/rubysocket.h')
-rw-r--r--ext/socket/rubysocket.h228
1 files changed, 228 insertions, 0 deletions
diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h
new file mode 100644
index 0000000000..9f6116016b
--- /dev/null
+++ b/ext/socket/rubysocket.h
@@ -0,0 +1,228 @@
+#ifndef RUBY_SOCKET_H
+#define RUBY_SOCKET_H 1
+
+#include "ruby/ruby.h"
+#include "ruby/io.h"
+#include "ruby/util.h"
+#include <stdio.h>
+#include <sys/types.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+
+#ifdef HAVE_XTI_H
+#include <xti.h>
+#endif
+
+#ifndef _WIN32
+#if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE)
+# include <net/socket.h>
+#else
+# include <sys/socket.h>
+#endif
+#include <netinet/in.h>
+#ifdef HAVE_NETINET_IN_SYSTM_H
+# include <netinet/in_systm.h>
+#endif
+#ifdef HAVE_NETINET_TCP_H
+# include <netinet/tcp.h>
+#endif
+#ifdef HAVE_NETINET_UDP_H
+# include <netinet/udp.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+# include <arpa/inet.h>
+#endif
+#include <netdb.h>
+#endif
+#include <errno.h>
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h>
+#endif
+
+#if defined(HAVE_FCNTL)
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#endif
+#ifndef EWOULDBLOCK
+#define EWOULDBLOCK EAGAIN
+#endif
+#ifndef HAVE_GETADDRINFO
+# include "addrinfo.h"
+#endif
+#include "sockport.h"
+
+#ifndef NI_MAXHOST
+# define NI_MAXHOST 1025
+#endif
+#ifndef NI_MAXSERV
+# define NI_MAXSERV 32
+#endif
+
+#ifndef HAVE_SOCKADDR_STORAGE
+/*
+ * RFC 2553: protocol-independent placeholder for socket addresses
+ */
+#define _SS_MAXSIZE 128
+#define _SS_ALIGNSIZE (sizeof(double))
+#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(unsigned char) * 2)
+#define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(unsigned char) * 2 - \
+ _SS_PAD1SIZE - _SS_ALIGNSIZE)
+
+struct sockaddr_storage {
+#ifdef HAVE_SA_LEN
+ unsigned char ss_len; /* address length */
+ unsigned char ss_family; /* address family */
+#else
+ unsigned short ss_family;
+#endif
+ char __ss_pad1[_SS_PAD1SIZE];
+ double __ss_align; /* force desired structure storage alignment */
+ char __ss_pad2[_SS_PAD2SIZE];
+};
+#endif
+
+#if defined(_AIX)
+#ifndef CMSG_SPACE
+# define CMSG_SPACE(len) (_CMSG_ALIGN(sizeof(struct cmsghdr)) + _CMSG_ALIGN(len))
+#endif
+#ifndef CMSG_LEN
+# define CMSG_LEN(len) (_CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
+#endif
+#endif
+
+#ifdef __BEOS__
+#undef close
+#define close closesocket
+#endif
+
+#define INET_CLIENT 0
+#define INET_SERVER 1
+#define INET_SOCKS 2
+
+extern int do_not_reverse_lookup;
+#define FMODE_NOREVLOOKUP 0x100
+
+extern VALUE rb_cBasicSocket;
+extern VALUE rb_cIPSocket;
+extern VALUE rb_cTCPSocket;
+extern VALUE rb_cTCPServer;
+extern VALUE rb_cUDPSocket;
+#ifdef AF_UNIX
+extern VALUE rb_cUNIXSocket;
+extern VALUE rb_cUNIXServer;
+#endif
+extern VALUE rb_cSocket;
+extern VALUE rb_cAddrInfo;
+
+extern VALUE rb_eSocket;
+
+#ifdef SOCKS
+extern VALUE rb_cSOCKSSocket;
+#ifdef SOCKS5
+#include <socks.h>
+#else
+void SOCKSinit();
+int Rconnect();
+#endif
+#endif
+
+
+#define BLOCKING_REGION(func, arg) (long)rb_thread_blocking_region((func), (arg), RUBY_UBF_IO, 0)
+
+#define SockAddrStringValue(v) sockaddr_string_value(&(v))
+#define SockAddrStringValuePtr(v) sockaddr_string_value_ptr(&(v))
+VALUE sockaddr_string_value(volatile VALUE *);
+char *sockaddr_string_value_ptr(volatile VALUE *);
+
+NORETURN(void raise_socket_error(const char *, int));
+
+int family_to_int(char *str, int len, int *valp);
+
+int family_arg(VALUE domain);
+int socktype_arg(VALUE type);
+int level_arg(VALUE level);
+int optname_arg(int level, VALUE optname);
+int shutdown_how_arg(VALUE how);
+
+ID intern_protocol_family(int val);
+ID intern_socktype(int val);
+ID intern_ipproto(int val);
+ID intern_family(int val);
+
+int rb_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);
+int rb_getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags);
+struct addrinfo *sock_addrinfo(VALUE host, VALUE port, int socktype, int flags);
+struct addrinfo* sock_getaddrinfo(VALUE host, VALUE port, struct addrinfo *hints, int socktype_hack);
+VALUE fd_socket_addrinfo(int fd, struct sockaddr *addr, socklen_t len);
+VALUE io_socket_addrinfo(VALUE io, struct sockaddr *addr, socklen_t len);
+
+VALUE make_ipaddr(struct sockaddr *addr);
+VALUE ipaddr(struct sockaddr *sockaddr, int norevlookup);
+VALUE make_hostent(VALUE host, struct addrinfo *addr, VALUE (*ipaddr)(struct sockaddr *, size_t));
+
+const char* unixpath(struct sockaddr_un *sockaddr, socklen_t len);
+VALUE unixaddr(struct sockaddr_un *sockaddr, socklen_t len);
+
+int ruby_socket(int domain, int type, int proto);
+VALUE init_sock(VALUE sock, int fd);
+VALUE sock_s_socketpair(VALUE klass, VALUE domain, VALUE type, VALUE protocol);
+VALUE init_inetsock(VALUE sock, VALUE remote_host, VALUE remote_serv, VALUE local_host, VALUE local_serv, int type);
+VALUE init_unixsock(VALUE sock, VALUE path, int server);
+
+struct send_arg {
+ int fd, flags;
+ VALUE mesg;
+ struct sockaddr *to;
+ socklen_t tolen;
+};
+
+VALUE sendto_blocking(void *data);
+VALUE send_blocking(void *data);
+VALUE bsock_send(int argc, VALUE *argv, VALUE sock);
+
+enum sock_recv_type {
+ RECV_RECV, /* BasicSocket#recv(no from) */
+ RECV_IP, /* IPSocket#recvfrom */
+ RECV_UNIX, /* UNIXSocket#recvfrom */
+ RECV_SOCKET /* Socket#recvfrom */
+};
+
+VALUE s_recvfrom_nonblock(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from);
+VALUE s_recvfrom(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from);
+
+int ruby_connect(int fd, const struct sockaddr *sockaddr, int len, int socks);
+
+VALUE sock_listen(VALUE sock, VALUE log);
+
+VALUE s_accept(VALUE klass, int fd, struct sockaddr *sockaddr, socklen_t *len);
+VALUE s_accept_nonblock(VALUE klass, rb_io_t *fptr, struct sockaddr *sockaddr, socklen_t *len);
+
+void Init_basicsocket(void);
+void Init_ipsocket(void);
+void Init_tcpsocket(void);
+void Init_tcpserver(void);
+void Init_sockssocket(void);
+void Init_udpsocket(void);
+void Init_unixsocket(void);
+void Init_unixserver(void);
+void Init_socket_constants(void);
+void Init_addrinfo(void);
+void Init_socket_init(void);
+
+#endif