| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- /* -*-C++-*-
- "$Id: FSocket_Win32.H,v 1.2 2000/05/16 16:58:12 jamespalmer Exp $"
- Copyright 1997 GARRET.
- Copyright 1999-2000 by the Flek development team.
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA.
- Please report all bugs and problems to "[email protected]".
- */
- // FSocket was adapted from K.A. Knizhnik's very nice SAL library.
- #ifndef __FSOCKET_WIN32_H__
- #define __FSOCKET_WIN32_H__
- #include <FLU/FSocket.H>
- class FSocket_Win32 : public FSocket {
- 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:
- int open(int listen_queue_size);
- int connect(int max_attempts, time_t timeout);
- int read(void* buf, size_t min_size, size_t max_size,time_t timeout);
- int read(void* buf, size_t size);
- int write(void const* buf, size_t size);
- int valid();
- int close();
- int shutdown();
- void get_error_text(char* buf, size_t buf_size);
- FSocket* accept();
- int cancel_accept();
- FSocket_Win32(const char* address);
- FSocket_Win32(SOCKET new_sock);
- ~FSocket_Win32();
- };
- #define SOCKET_BUF_SIZE (8*1024)
- #define ACCEPT_TIMEOUT (30*1000)
- class FSocket_Win32_Local : public FSocket {
- 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:
- int open(int listen_queue_size);
- int connect(int max_attempts, time_t timeout);
- int read(void* buf, size_t min_size, size_t max_size,time_t timeout);
- int read(void* buf, size_t size);
- int write(void const* buf, size_t size);
- int valid();
- int close();
- int shutdown();
- void get_error_text(char* buf, size_t buf_size);
- FSocket* accept();
- int cancel_accept();
- FSocket_Win32_Local(const char* address);
- FSocket_Win32_Local();
- ~FSocket_Win32_Local();
- };
- #endif
|