Socket.h 3.1 KB
Newer Older
1 2
/**************************************************************************/
/*                                                                        */
3 4 5 6 7 8
/* Copyright (c) 2001, 2011 NoMachine (http://www.nomachine.com)          */
/* Copyright (c) 2008-2014 Oleksandr Shneyder <o.shneyder@phoca-gmbh.de>  */
/* Copyright (c) 2014-2016 Ulrich Sibiller <uli42@gmx.de>                 */
/* Copyright (c) 2014-2016 Mihai Moldovan <ionic@ionic.de>                */
/* Copyright (c) 2011-2016 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>*/
/* Copyright (c) 2015-2016 Qindel Group (http://www.qindel.com)           */
9 10
/*                                                                        */
/* NXCOMP, NX protocol compression and NX extensions to this software     */
11
/* are copyright of the aforementioned persons and companies.             */
12
/*                                                                        */
13 14 15
/* Redistribution and use of the present software is allowed according    */
/* to terms specified in the file LICENSE.nxcomp which comes in the       */
/* source distribution.                                                   */
16 17 18
/*                                                                        */
/* All rights reserved.                                                   */
/*                                                                        */
19 20 21 22 23
/* NOTE: This software has received contributions from various other      */
/* contributors, only the core maintainers and supporters are listed as   */
/* copyright holders. Please contact us, if you feel you should be listed */
/* as copyright holder, as well.                                          */
/*                                                                        */
24 25 26 27 28
/**************************************************************************/

#ifndef Socket_H
#define Socket_H

29 30 31 32
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

33 34 35 36 37 38 39 40 41
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>

#ifdef __sun
#include <stropts.h>
#include <sys/filio.h>
#endif

42 43 44 45 46 47
#ifdef HAVE_IN_ADDR_T
#define IN_ADDR_T in_addr_t
#else
#define IN_ADDR_T unsigned
#endif

48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
//
// Set socket options.
//

int SetReuseAddress(int fd);
int SetNonBlocking(int fd, int value);
int SetLingerTimeout(int fd, int timeout);
int SetSendBuffer(int fd, int size);
int SetReceiveBuffer(int fd, int size);
int SetNoDelay(int fd, int value);
int SetKeepAlive(int fd);
int SetLowDelay(int fd);
int SetCloseOnExec(int fd);

//
// Get kernel support level.
//

int GetKernelStep();

//
// Get socket info.
//

int GetBytesReadable(int fd);
int GetBytesWritable(int fd);
int GetBytesQueued(int fd);

//
// Inline version, providing direct access
// to the interface.
//

#include "Misc.h"

inline int GetBytesReadable(int fd, int *readable)
{
  long t;

  int result = ioctl(fd, FIONREAD, &t);

  #ifdef DEBUG
  *logofs << "Socket: Bytes readable from FD#"
          << fd << " are " << t << " with result "
          << result << ".\n" << logofs_flush;
  #endif

  *readable = (int) t;

  return result;
}

//
// Query Internet address.
//

int GetHostAddress(const char *name);

#endif /* Socket_H */