sockio.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:7k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: sockio.h,v 1.4.36.3 2004/07/09 01:46:47 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _SOCKIO_H_
  50. #define _SOCKIO_H_
  51. #ifndef _MAC_MACHO
  52. #include "platform/mac/oterrs.h"
  53. #endif
  54. //#include "OpenTransport.h" 
  55. #include "bio.h"
  56. #include "platform/mac/macsockets.h"
  57. #ifndef _PN_MACHDEP_H_ // because of the mish-mash of precompiler hell, we do this this way
  58. #include <errno.h>
  59. #define sock_error() (errno)
  60. #endif
  61. class SockFd;
  62. #ifndef INADDR_NONE
  63. #define INADDR_NONE (-1)
  64. #endif /* ndef INADDR_NONE */
  65. class mIO {
  66. public:
  67. mIO() {fd = -1; err = 0;}
  68. ~mIO() {}
  69. protected:
  70.     INT16 fd;
  71.     INT16 err;
  72.     INT16 _flags;
  73. };
  74. #ifdef DEFINED_ELSEWHERE
  75. class IO {
  76. public:
  77. IO();
  78.     virtual ~IO();
  79.     virtual INT16 read(void* buf, INT32 size) = 0;
  80.     virtual INT16 write(const void* buf, INT32 size) = 0;
  81.     virtual off_t seek(off_t off, INT32 whence) = 0;
  82.     virtual INT32 close() = 0;
  83.     virtual INT16 ioctl(UINT32 request, char* arg) = 0;
  84.     virtual INT16 status(struct stat *st) = 0;
  85.     INT16 filenum();
  86.     INT16 error();
  87.     INT16 flags();
  88. protected:
  89.     INT16 fd;
  90.     INT16 err;
  91.     INT16 _flags;
  92. };
  93. inline
  94. IO::IO() {
  95.     fd = -1;
  96.     err = 0;
  97. }
  98. inline INT16
  99. IO::filenum() {
  100.     return fd;
  101. }
  102. inline INT16
  103. IO::error() {
  104.     return err;
  105. }
  106. inline INT16
  107. IO::flags() {
  108.     return _flags;
  109. }
  110. #endif //DEFINED_ELSEWHERE
  111. #ifdef DEFINED_ELSEWHERE
  112. inline
  113. IO::~IO() {
  114. }
  115. #endif
  116. class File_IO : public IO, mIO {
  117. public:
  118. File_IO(const char* file, INT16 flags, mode_t mode = 0666);
  119. File_IO(INT16 fd, INT16 flags);
  120. ~File_IO();
  121.     INT16 ioctl(UINT32 request, char* arg);
  122.     INT32 close();
  123.     INT32 read(void* buf, INT32 size);
  124.     INT32 write(const void* buf, INT32 size);
  125.     off_t seek(off_t off, INT32 whence);
  126.     INT16 status(struct stat *st);
  127.     off_t file_size();
  128. #ifdef _MACINTOSH
  129. private:
  130.     void *mFile; // pointer to the actual Mac file object
  131. #endif
  132. };
  133. struct SocketIO: public IO,mIO {
  134. SocketIO();
  135. ~SocketIO();
  136.     static INT32 create_address(struct sockaddr_in& addr, char* host,
  137.        INT16 port);
  138.     INT32 init(INT32 type, INT16 port, BOOL do_block=TRUE, 
  139.      BOOL reuse_addr=TRUE, BOOL reuse_port=FALSE);
  140. //    INT32 init(INT16 type, INT16 port, INT16 do_block=1);
  141.     INT32 listen(INT32 backlog);
  142.     INT32 connect(char* host, INT16 port);
  143.     INT32 connect(sockaddr_in *addr);
  144.     INT16 accept(sockaddr_in *addr, INT32* addrlen);
  145.     INT32 bind(sockaddr_in*);
  146.     INT32 blocking();
  147.     INT32 nonblocking();
  148.     INT32 getsockname(sockaddr_in* addr, INT32* addr_len);
  149. //    INT32 ioctl(UINT32 request, char* arg);
  150.     INT32 close();
  151.     INT32 read(void* buf, INT32 size);
  152.     INT32 write(const void* buf, INT32 size);
  153.     off_t seek(off_t off, INT32 whence);
  154.     INT16 port();
  155.     INT32 disable();
  156.     INT32 reuse_port(BOOL enable);
  157.     INT32 reuse_addr(BOOL enable);
  158.     INT32 error();
  159.     INT32 flags();
  160. //    virtual SOCKET socket();
  161.     off_t file_size();
  162.     static const UINT32 MAX_HOSTNAME_LEN;
  163.     static INT16 gethostname(char* name, INT16 count);
  164.     void start_write();
  165.     void stop_write();
  166.     INT16 status(struct stat *st);
  167.     INT16  socknum();
  168.     
  169.     INT16 sock;
  170.     INT32 do_write;
  171.     SockFd* sock_fd;
  172.     
  173. #ifdef _MACINTOSH
  174. protected:
  175.     void *mSocket; // ptr to the actual Mac network socket
  176.     INT16 mBackLog; // accepting socket backlog
  177. #endif
  178. };
  179. // XXX does not belong in the SocketIO class
  180. inline void
  181. SocketIO::stop_write() {
  182.     do_write = 0;
  183. }
  184. // XXX does not belong in the SocketIO class
  185. inline void
  186. SocketIO::start_write() {
  187.     do_write = 1;
  188. }
  189. inline INT16
  190. SocketIO::socknum()
  191. {
  192.     return sock;
  193. }
  194. inline INT32
  195. SocketIO::disable()
  196. {
  197.     sock = -2;
  198.     return 0;
  199. }
  200. struct UDP_IO: public SocketIO {
  201. UDP_IO(SockFd* s);
  202.     INT16 init(INT16 port, INT16 do_block=1);
  203.     INT16 connect(char* host, INT16 port, INT16 do_block=1);
  204.     INT16 connect(sockaddr_in *addr, INT16 do_block=1);
  205.     INT16 recvfrom(void *buf, size_t len, INT16 flags,
  206.  sockaddr *from,INT16 *fromlen);
  207.     INT16 recvfrom(void *buf, size_t len, INT16 flags,
  208.  sockaddr_in *from,INT16 *fromlen);
  209.     INT16 sendto(const char* msg, size_t len, INT16 flags,
  210.        const struct sockaddr_in *to, INT16 tolen);
  211. };
  212. struct TCP_IO: public SocketIO {
  213. TCP_IO(SockFd* s);
  214. TCP_IO(INT16 conn, SockFd* s);
  215.     INT16 init(INT16 port, INT16 do_block=1);
  216.     INT16 connect(char* host, INT16 port, INT16 do_block=1);
  217.     INT16 connect(sockaddr_in *addr, INT16 do_block=1);
  218.     INT16 listen(INT16 port, INT16 backlog, INT16 do_block=1);
  219.     INT16 reset_on_kill();
  220. };
  221. // XXX abstract out the interface so that MWERKS def is not needed
  222. inline INT16
  223. SocketIO::gethostname(char* name, INT16 count)
  224. {
  225. INT16 result = ::gethostname(name, count);
  226.     if (result < 0) return sock_error();
  227.     return 0;
  228. }
  229. #undef sock_error
  230. #endif/*_SOCKIO_H_*/