Rudiments
filedescriptor.h
1 // Copyright (c) 2002 David Muse
2 // See the COPYING file for more information.
3 
4 #ifndef RUDIMENTS_FILEDESCRIPTOR_H
5 #define RUDIMENTS_FILEDESCRIPTOR_H
6 
7 #include <rudiments/private/filedescriptorincludes.h>
8 
9 #ifdef RUDIMENTS_NAMESPACE
10 namespace rudiments {
11 #endif
12 
13 class listener;
14 class filedescriptorprivate;
15 
18 class RUDIMENTS_DLLSPEC filedescriptor {
19  public:
22 
26 
29  filedescriptor &operator=(const filedescriptor &f);
30 
33  virtual ~filedescriptor();
34 
37  virtual bool close();
38 
40  int32_t getFileDescriptor() const;
41 
44  void setFileDescriptor(int32_t filedesc);
45 
55  int32_t duplicate() const;
56 
63  bool duplicate(int32_t newfd) const;
64 
65  #ifdef RUDIMENTS_HAS_SSL
66 
70  void setSSLContext(SSL_CTX *ctx);
71 
75  SSL_CTX *getSSLContext();
76 
86  bool initializeSSL();
87 
92  SSL *getSSL() const;
93 
98  void deInitializeSSL();
99 
106  int32_t getSSLResult() const;
107  #endif
108 
112  virtual bool useNonBlockingMode() const;
113 
117  virtual bool useBlockingMode() const;
118 
121  bool isUsingNonBlockingMode() const;
122 
126  ssize_t write(uint16_t number) const;
127 
131  ssize_t write(uint32_t number) const;
132 
136  ssize_t write(uint64_t number) const;
137 
141  ssize_t write(int16_t number) const;
142 
146  ssize_t write(int32_t number) const;
147 
151  ssize_t write(int64_t number) const;
152 
156  ssize_t write(float number) const;
157 
161  ssize_t write(double number) const;
162 
166  ssize_t write(unsigned char character) const;
167 
171  ssize_t write(char character) const;
172 
176  ssize_t write(bool value) const;
177 
181  ssize_t write(const unsigned char *string) const;
182 
186  ssize_t write(const char *string) const;
187 
193  ssize_t write(const unsigned char *string, size_t size) const;
194 
200  ssize_t write(const char *string, size_t size) const;
201 
205  ssize_t write(const void *buffer, size_t size) const;
206 
212  ssize_t write(uint16_t number, long sec, long usec) const;
213 
219  ssize_t write(uint32_t number, long sec, long usec) const;
220 
226  ssize_t write(uint64_t number, long sec, long usec) const;
227 
233  ssize_t write(int16_t number, long sec, long usec) const;
234 
240  ssize_t write(int32_t number, long sec, long usec) const;
241 
247  ssize_t write(int64_t number, long sec, long usec) const;
248 
254  ssize_t write(float number, long sec, long usec) const;
255 
261  ssize_t write(double number, long sec, long usec) const;
262 
268  ssize_t write(unsigned char character,
269  long sec, long usec) const;
270 
276  ssize_t write(char character, long sec, long usec) const;
277 
283  ssize_t write(bool value, long sec, long usec) const;
284 
290  ssize_t write(const unsigned char *string,
291  long sec, long usec) const;
292 
298  ssize_t write(const char *string,
299  long sec, long usec) const;
300 
307  ssize_t write(const unsigned char *string, size_t size,
308  long sec, long usec) const;
309 
316  ssize_t write(const char *string, size_t size,
317  long sec, long usec) const;
318 
324  ssize_t write(const void *buffer, size_t size,
325  long sec, long usec) const;
326 
331  ssize_t read(uint16_t *buffer) const;
332 
337  ssize_t read(uint32_t *buffer) const;
338 
343  ssize_t read(uint64_t *buffer) const;
344 
348  ssize_t read(int16_t *buffer) const;
349 
353  ssize_t read(int32_t *buffer) const;
354 
358  ssize_t read(int64_t *buffer) const;
359 
364  ssize_t read(float *buffer) const;
365 
370  ssize_t read(double *buffer) const;
371 
376  ssize_t read(unsigned char *buffer) const;
377 
381  ssize_t read(char *buffer) const;
382 
386  ssize_t read(bool *buffer) const;
387 
391  ssize_t read(unsigned char *buffer, size_t size) const;
392 
396  ssize_t read(char *buffer, size_t size) const;
397 
401  ssize_t read(void *buf, size_t size) const;
402 
411  ssize_t read(char **buffer, const char *terminator) const;
412 
418  ssize_t read(uint16_t *buffer, long sec, long usec) const;
419 
425  ssize_t read(uint32_t *buffer, long sec, long usec) const;
426 
432  ssize_t read(uint64_t *buffer, long sec, long usec) const;
433 
439  ssize_t read(int16_t *buffer, long sec, long usec) const;
440 
446  ssize_t read(int32_t *buffer, long sec, long usec) const;
447 
453  ssize_t read(int64_t *buffer, long sec, long usec) const;
454 
460  ssize_t read(float *buffer, long sec, long usec) const;
461 
467  ssize_t read(double *buffer, long sec, long usec) const;
468 
474  ssize_t read(unsigned char *buffer,
475  long sec, long usec) const;
476 
482  ssize_t read(char *buffer, long sec, long usec) const;
483 
489  ssize_t read(bool *buffer, long sec, long usec) const;
490 
496  ssize_t read(unsigned char *buffer, size_t size,
497  long sec, long usec) const;
498 
504  ssize_t read(char *buffer, size_t size,
505  long sec, long usec) const;
506 
512  ssize_t read(void *buf, size_t size,
513  long sec, long usec) const;
514 
524  ssize_t read(char **buffer, const char *terminator,
525  long sec, long usec) const;
526 
527 
551  int32_t waitForNonBlockingRead(long sec, long usec) const;
552 
577  int32_t waitForNonBlockingWrite(long sec, long usec) const;
578 
579 
584  void retryInterruptedReads();
585 
591  void dontRetryInterruptedReads();
592 
597  void retryInterruptedWrites();
598 
604  void dontRetryInterruptedWrites();
605 
611  void retryInterruptedWaits();
612 
618  void dontRetryInterruptedWaits();
619 
625  void retryInterruptedFcntl();
626 
632  void dontRetryInterruptedFcntl();
633 
639  void retryInterruptedIoctl();
640 
646  void dontRetryInterruptedIoctl();
647 
648 
659  void allowShortReads();
660 
666  void dontAllowShortReads();
667 
679  void allowShortWrites();
680 
686  void dontAllowShortWrites();
687 
697  void useListener(listener *lstnr);
698 
705  void dontUseListener();
706 
709  listener *getListener();
710 
714  void useListenerInsideReads();
715 
719  void dontUseListenerInsideReads();
720 
724  void useListenerInsideWrites();
725 
729  void dontUseListenerInsideWrites();
730 
731 
735  virtual bool passFileDescriptor(int32_t fd) const;
736 
740  virtual bool receiveFileDescriptor(int32_t *fd) const;
741 
745  void translateByteOrder();
746 
750  void dontTranslateByteOrder();
751 
754  int32_t fCntl(int32_t command, long arg) const;
755 
758  int32_t ioCtl(int32_t command, void *arg) const;
759 
768  bool useNaglesAlgorithm();
769 
774  bool dontUseNaglesAlgorithm();
775 
780  bool setTcpWriteBufferSize(int32_t size);
781 
786  bool getTcpWriteBufferSize(int32_t *size);
787 
792  bool setTcpReadBufferSize(int32_t size);
793 
798  bool getTcpReadBufferSize(int32_t *size);
799 
804  const char *getType() const;
805 
812  char *getPeerAddress() const;
813 
814 
836  bool setWriteBufferSize(ssize_t size) const;
837 
864  bool flushWriteBuffer(long sec, long usec) const;
865 
866 
886  bool setReadBufferSize(ssize_t size) const;
887 
893  bool closeOnExec();
894 
901  bool dontCloseOnExec();
902 
909  bool getCloseOnExec();
910 
913  static uint16_t hostToNet(uint16_t value);
914 
917  static uint32_t hostToNet(uint32_t value);
918 
921  static uint64_t hostToNet(uint64_t value);
922 
925  static uint16_t netToHost(uint16_t value);
926 
929  static uint32_t netToHost(uint32_t value);
930 
933  static uint64_t netToHost(uint64_t value);
934 
935  #include <rudiments/private/filedescriptor.h>
936 };
937 
938 #ifdef RUDIMENTS_NAMESPACE
939 }
940 #endif
941 
942 #endif