/* i_socket.h JCG TCPIP ソケット I/F JCG実行環境構築用プログラム・ヘッダファイル Copyright (C) 2000, 2001 Personal Media Corporation */ #ifndef _I_SOCKET_H_ #define _I_SOCKET_H_ #include /* プロトコルファミリ */ #define PF_UNSPEC 0 /* unspecified protocol family */ #define PF_INET 2 /* TCP/IP and related */ /* アドレスファミリ */ #define AF_UNSPEC 0 /* unspecified address family */ #define AF_INET 2 /* TCP/IP and related */ /* ソケットタイプ */ #define SOCK_STREAM 1 /* stream socket */ #define SOCK_DGRAM 2 /* datagram socket */ #define SOCK_RAW 3 /* raw-protocol interface */ /* オプション : getsockopt, setsockopt */ #define SOL_SOCKET 0xffff /* options for socket level */ #define IPPROTO_TCP 0x0006 /* options for TCP level */ #define IPPROTO_IP 0x0000 /* options for IP level */ #define SO_DEBUG 0x0001 /* turn on debugging info recording */ #define SO_REUSEADDR 0x0004 /* allow local address reuse */ #define SO_KEEPALIVE 0x0008 /* keep connections alive */ #define SO_DONTROUTE 0x0010 /* just use interface addresses */ #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ #define SO_LINGER 0x0080 /* linger on close if data present */ #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ #define SO_ERROR 0x1007 /* get error status and clear */ #define SO_TYPE 0x1008 /* get socket type */ #define TCP_MAXSEG 0x0002 /* maximum segment size */ #define TCP_NODELAY 0x0001 /* immediate send() */ #define IP_OPTIONS 0x0001 /* IP header options */ /* オプション : recv, send */ #define MSG_OOB 0x01 /* send or receive out of band data */ #define MSG_PEEK 0x02 /* take data but leave it */ #define MSG_DONTROUTE 0x04 /* do not route */ /* オプション : fcntl */ #define O_NDELAY 0x04 /* non-blocking */ #define FNDELAY O_NDELAY /* synonym */ #define F_GETFL 3 /* get flags */ #define F_SETFL 4 /* set flags */ /* オプション : ioctl */ #define SIOCATMARK (0x40000000 | (4 << 16) | ('s' << 8) | 7) /* check for out of bound data */ #define FIONBIO (0x80000000 | (4 << 16) | ('f' << 8) | 126) /* set/clear non-blocking I/O */ #define FIONREAD (0x40000000 | (4 << 16) | ('f' << 8) | 127) /* number of bytes to read */ /* アドレス */ struct sockaddr { unsigned short sa_family; /* address family */ char sa_data[14]; /* up to 14 bytes of direct address */ }; /* インターネットアドレス */ struct in_addr { unsigned long s_addr; }; #define INADDR_ANY (unsigned int)0x00000000 #define INADDR_BROADCAST (unsigned int)0xffffffff /* must be masked */ /* ソケットアドレス */ struct sockaddr_in { short sin_family; /* address family, must be unsigned */ unsigned short sin_port; /* port number, nutwork byte order */ struct in_addr sin_addr; /* sockect address */ char sin_zero[8]; /* zero padding */ }; /* I/O ベクトル */ struct iovec { /* address and length */ char *iov_base; /* base */ int iov_len; /* size */ }; /* メッセージヘッダ : recvmsg, sendmsg */ struct msghdr { /* Message header */ char *msg_name; /* optional address */ int msg_namelen; /* size of address */ struct iovec *msg_iov; /* scatter/gather array */ int msg_iovlen; /* # elements in msg_iov */ char *msg_accrights; /* access rights sent/received */ int msg_accrightslen; /* sizeof access rights */ }; /* host エントリ : gethostbyname */ struct hostent { /* structure for gethostbyname */ char *h_name; /* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* host address type */ int h_length; /* length of address */ char **h_addr_list; /* list of addresses from name server*/ #define h_addr h_addr_list[0] /* address, for backward compatiblity*/ }; /* server エントリ : getservbyname */ struct servent { /* structure for getservbyname */ char *s_name; /* official service name */ char **s_aliases; /* alias list */ int s_port; /* port # */ char *s_proto; /* protocol to use */ }; /* オプション : SO_LINGER */ struct linger { /* structure for the SO_LINGER opt. */ int l_onoff; /* zero=off, nonzero = on */ int l_linger; /* linger time, in seconds */ }; /* ビットマスク : slecect */ #ifndef FD_SETSIZE #define FD_SETSIZE 256 #define NFDBITS (sizeof(long) * 8) /* bits per mask */ #define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS))) #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) #define FD_ZERO(p) memset((void *)(p), 0, sizeof (*(p))) typedef struct fd_set { /* Bit mask for select() */ long fds_bits[(FD_SETSIZE + NFDBITS - 1) / NFDBITS]; } fd_set; #endif /* タイムアウト : select */ struct timeval { /* Timeout format for select() */ long tv_sec; /* seconds */ long tv_usec; /* microseconds */ }; /* タイプ定義 */ typedef struct sockaddr SOCKADDR; typedef struct hostent HOSTENT; typedef struct msghdr MSGHDR; typedef struct timeval TIMEVAL; typedef HOSTENT *HOSTENTP; /* 特殊機能 : isoc_finish */ #define isoc_control isoc_finish #define SO_BUFFERS -100 /* 空きバッファ数 */ #define SO_USECOUNT -101 /* 使用中カウンタ */ #define SO_LOCK -102 /* ロック */ #define SO_UNLOCK -103 /* アンロック */ #define SO_ISLOCKED -104 /* ロック状態 */ #define SO_PPPENABLE -105 /* PPP 許可 */ #define SO_PPPDISABLE -106 /* PPP 禁止 */ #define SO_PPPSTATUS -107 /* PPP 状態 */ /* その他 */ #define HBUFLEN 64 /* for gethostbyname, gethostbyaddr */ /* ソケットインタフェース関数 */ IMPORT ERR isoc_start(W arg); IMPORT ERR isoc_finish(W arg); IMPORT WERR isoc_accept(W s, SOCKADDR *nam, W *namlen); IMPORT ERR isoc_bind(W s, SOCKADDR *nam, W namlen); IMPORT ERR isoc_close(W s); IMPORT ERR isoc_connect(W s, SOCKADDR *nam, W namlen); IMPORT WERR isoc_fcntl(W s, W cmd, W arg); IMPORT ERR isoc_gethostbyname(B *nam, HOSTENT *hp, B *buf); IMPORT ERR isoc_gethostbyaddr(B *addr, W len, W type, HOSTENT *hp, B *buf); IMPORT ERR isoc_getpeername(W s, SOCKADDR *nam, W *namlen); IMPORT ERR isoc_getsockname(W s, SOCKADDR *nam, W *namlen); IMPORT ERR isoc_getsockopt(W s, W level, W optnam, B *optval, W *optlen); IMPORT ERR isoc_setsockopt(W s, W level, W optnam, B *optval, W optlen); IMPORT WERR isoc_ioctl(W s, W request, W arg); IMPORT WERR isoc_listen(W s, W backlog); IMPORT WERR isoc_read(W s, B *buf, W len); IMPORT WERR isoc_recv(W s, B *buf, W len, W flags); IMPORT WERR isoc_recvfrom(W s, B *buf, W len, W flags, SOCKADDR *from, W *flen); IMPORT WERR isoc_recvmsg(W s, MSGHDR *msg, int flags); IMPORT WERR isoc_select(W nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, TIMEVAL *tmout); IMPORT WERR isoc_write(W s, B *buf, W len); IMPORT WERR isoc_send(W s, B *buf, W len, W flags); IMPORT WERR isoc_sendto(W s, B *buf, W len, W flags, SOCKADDR *to, W tolen); IMPORT WERR isoc_sendmsg(W s, MSGHDR *msg, W flags); IMPORT ERR isoc_shutdown(W s, W how); IMPORT WERR isoc_socket(W domain, W type, W protocol); IMPORT ERR isoc_gethostname(B *name, W nlen); IMPORT ERR isoc_sethostname(B *name, W nlen); #endif /* I_SOCKET_H_ */