⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 w32sock.h

📁 一个不错的fastdb使用例子
💻 H
字号:
//-< W32SOCK.H >-----------------------------------------------------*--------*
// FastDB                    Version 1.0         (c) 1997  GARRET    *     ?  *
// (Main Memory Database Management System)                          *   /\|  *
//                                                                   *  /  \  *
//                          Created:      8-May-97    K.A. Knizhnik  * / [] \ *
//                          Last update:  8-May-97    K.A. Knizhnik  * GARRET *
//-------------------------------------------------------------------*--------*
// Windows sockets
//-------------------------------------------------------------------*--------*

#ifndef __W32SOCK_H__
#define __W32SOCK_H__

#include "sockio.h"

class win_socket : public socket_t
{

protected:
  SOCKET        s;
  int           errcode;  // error code of last failed operation
  char*         address;  // host address

  enum error_codes {
    ok = 0,
    not_opened = -1,
    bad_address = -2,
    connection_failed = -3,
    broken_pipe = -4,
    invalid_access_mode = -5
  };

public:
  bool      open(int listen_queue_size);
  bool      connect(int max_attempts, time_t timeout);

  int       read(void* buf, size_t min_size, size_t max_size,time_t timeout);
  bool      write(void const* buf, size_t size);

  bool      is_ok();
  bool      close();
  char*     get_peer_name();
  bool      shutdown();
  void      get_error_text(char* buf, size_t buf_size);

  socket_t* accept();
  bool      cancel_accept();

  int get_handle();

  win_socket(const char* address);
  win_socket(SOCKET new_sock);

  ~win_socket();
};

#define SOCKET_BUF_SIZE (8*1024)
#define ACCEPT_TIMEOUT  (30*1000)

class local_win_socket : public socket_t
{

protected:
  enum error_codes {
    ok = 0,
    not_opened = -1,
    broken_pipe = -2,
    timeout_expired = -3
  };
  enum socket_signals {
    RD,  // receive data
    RTR, // ready to receive
    TD,  // transfer data
    RTT  // ready to transfer
  };
  //------------------------------------------------------
  // Mapping between signals at opposite ends of socket:
  // TD  ---> RD
  // RTR ---> RTT
  //------------------------------------------------------

  struct socket_buf
  {
    volatile int RcvWaitFlag;
    volatile int SndWaitFlag;
    volatile int DataEnd;
    volatile int DataBeg;
    char Data[SOCKET_BUF_SIZE - 4*sizeof(int)];
  };

  struct accept_data
  {
    HANDLE Signal[4];
    HANDLE BufHnd;
  };

  struct connect_data
  {
    HANDLE Mutex;
    int    Pid;
  };

  socket_buf* RcvBuf;
  socket_buf* SndBuf;
  HANDLE      Signal[4];
  HANDLE      Mutex;
  HANDLE      BufHnd;
  int         Error;
  char*       Name;

public:
  bool      open(int listen_queue_size);
  bool      connect(int max_attempts, time_t timeout);

  int       read(void* buf, size_t min_size, size_t max_size,time_t timeout);
  bool      write(void const* buf, size_t size);

  char*     get_peer_name();
  bool      is_ok();
  bool      close();
  bool      shutdown();
  void      get_error_text(char* buf, size_t buf_size);

  socket_t* accept();
  bool      cancel_accept();

  int       get_handle();

  local_win_socket(const char* address);
  local_win_socket();

  ~local_win_socket();
};

#endif





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -