00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 #ifndef ACE_POSIX_ASYNCH_IO_H
00021 #define ACE_POSIX_ASYNCH_IO_H
00022 
00023 #include  "ace/config-all.h"
00024 
00025 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00026 #pragma once
00027 #endif 
00028 
00029 #if defined (ACE_HAS_AIO_CALLS)
00030 
00031 #include "ace/os_include/os_aio.h"
00032 
00033 #include "ace/Asynch_IO_Impl.h"
00034 #include "ace/Unbounded_Queue.h"
00035 #include "ace/Map_Manager.h"
00036 #include "ace/Event_Handler.h"
00037 #if defined(INTEGRITY)
00038 #include "ace/ACE.h"
00039 #endif
00040 
00041 #include "ace/Null_Mutex.h"
00042 
00043 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00044 
00045 
00046 class ACE_POSIX_Proactor;
00047 class ACE_Proactor_Impl;
00048 class ACE_Handle_Set;
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 class ACE_Export ACE_POSIX_Asynch_Result : public virtual ACE_Asynch_Result_Impl,
00058                                            public aiocb
00059 {
00060 public:
00061 
00062   size_t bytes_transferred (void) const;
00063 
00064 
00065   const void *act (void) const;
00066 
00067 
00068   int success (void) const;
00069 
00070 
00071 
00072 
00073 
00074 
00075 
00076   const void *completion_key (void) const;
00077 
00078 
00079   u_long error (void) const;
00080 
00081 
00082   ACE_HANDLE event (void) const;
00083 
00084 
00085 
00086 
00087 
00088 
00089 
00090 
00091   u_long offset (void) const;
00092   u_long offset_high (void) const;
00093 
00094 
00095   int priority (void) const;
00096 
00097 
00098 
00099 
00100 
00101 
00102   int signal_number (void) const;
00103 
00104 
00105   int post_completion (ACE_Proactor_Impl *proactor);
00106 
00107 
00108   virtual ~ACE_POSIX_Asynch_Result (void);
00109 
00110 
00111   void set_error (u_long errcode);
00112 
00113 
00114   void set_bytes_transferred (size_t nbytes);
00115 
00116 protected:
00117 
00118   ACE_POSIX_Asynch_Result (const ACE_Handler::Proxy_Ptr &handler_proxy,
00119                            const void* act,
00120                            ACE_HANDLE event,
00121                            u_long offset,
00122                            u_long offset_high,
00123                            int priority,
00124                            int signal_number);
00125 
00126 
00127   ACE_Handler::Proxy_Ptr handler_proxy_;
00128 
00129 
00130 
00131 
00132 
00133 
00134 
00135   const void *act_;
00136 
00137 
00138   size_t bytes_transferred_;
00139 
00140 
00141   int success_;
00142 
00143 
00144   const void *completion_key_;
00145 
00146 
00147   u_long error_;
00148 };
00149 
00150 
00151 
00152 
00153 
00154 
00155 
00156 
00157 class ACE_Export ACE_POSIX_Asynch_Operation : public virtual ACE_Asynch_Operation_Impl
00158 {
00159 public:
00160 
00161 
00162 
00163 
00164 
00165 
00166 
00167 
00168 
00169   int open (const ACE_Handler::Proxy_Ptr &handler_proxy,
00170             ACE_HANDLE handle,
00171             const void *completion_key,
00172             ACE_Proactor *proactor = 0);
00173 
00174 
00175   int cancel (void);
00176 
00177   
00178 
00179 
00180   ACE_Proactor* proactor (void) const;
00181 
00182 
00183   ACE_POSIX_Proactor * posix_proactor (void) const;
00184 
00185 protected:
00186 
00187   ACE_POSIX_Asynch_Operation (ACE_POSIX_Proactor *posix_proactor);
00188 
00189 
00190   virtual ~ACE_POSIX_Asynch_Operation (void);
00191 
00192   
00193   
00194   
00195   
00196   
00197   
00198   
00199 
00200 
00201 
00202 
00203 
00204 
00205 
00206   ACE_POSIX_Proactor *posix_proactor_;
00207 
00208 
00209   ACE_Proactor *proactor_;
00210 
00211 
00212   ACE_Handler::Proxy_Ptr handler_proxy_;
00213 
00214 
00215   ACE_HANDLE handle_;
00216 };
00217 
00218 
00219 
00220 
00221 
00222 
00223 
00224 class ACE_Export ACE_POSIX_Asynch_Read_Stream_Result : public virtual ACE_Asynch_Read_Stream_Result_Impl,
00225                                                        public ACE_POSIX_Asynch_Result
00226 {
00227 
00228 
00229   friend class ACE_POSIX_Asynch_Read_Stream;
00230 
00231 
00232   friend class ACE_POSIX_Proactor;
00233 
00234 public:
00235 
00236 
00237   size_t bytes_to_read (void) const;
00238 
00239 
00240   ACE_Message_Block &message_block (void) const;
00241 
00242 
00243   ACE_HANDLE handle (void) const;
00244 
00245 protected:
00246   ACE_POSIX_Asynch_Read_Stream_Result (const ACE_Handler::Proxy_Ptr &handler_proxy,
00247                                        ACE_HANDLE handle,
00248                                        ACE_Message_Block &message_block,
00249                                        size_t bytes_to_read,
00250                                        const void* act,
00251                                        ACE_HANDLE event,
00252                                        int priority,
00253                                        int signal_number);
00254   
00255   
00256 
00257 
00258 
00259   virtual void complete (size_t bytes_transferred,
00260                          int success,
00261                          const void *completion_key,
00262                          u_long error);
00263 
00264 
00265   virtual ~ACE_POSIX_Asynch_Read_Stream_Result (void);
00266 
00267   
00268   
00269 
00270 
00271   ACE_Message_Block &message_block_;
00272 
00273   
00274   
00275 };
00276 
00277 
00278 
00279 
00280 
00281 
00282 
00283 
00284 class ACE_Export ACE_POSIX_Asynch_Read_Stream : public virtual ACE_Asynch_Read_Stream_Impl,
00285                                                 public ACE_POSIX_Asynch_Operation
00286 {
00287 public:
00288 
00289   ACE_POSIX_Asynch_Read_Stream (ACE_POSIX_Proactor *posix_proactor);
00290 
00291 
00292 
00293   int read (ACE_Message_Block &message_block,
00294             size_t bytes_to_read,
00295             const void *act,
00296             int priority,
00297             int signal_number = 0);
00298 
00299 
00300   virtual ~ACE_POSIX_Asynch_Read_Stream (void);
00301 };
00302 
00303 
00304 
00305 
00306 
00307 
00308 
00309 
00310 
00311 
00312 
00313 
00314 
00315 class ACE_Export ACE_POSIX_Asynch_Write_Stream_Result : public virtual ACE_Asynch_Write_Stream_Result_Impl,
00316                                                         public ACE_POSIX_Asynch_Result
00317 {
00318 
00319   friend class ACE_POSIX_Asynch_Write_Stream;
00320 
00321 
00322   friend class ACE_POSIX_Proactor;
00323 
00324 public:
00325 
00326 
00327   size_t bytes_to_write (void) const;
00328 
00329 
00330   ACE_Message_Block &message_block (void) const;
00331 
00332 
00333   ACE_HANDLE handle (void) const;
00334 
00335 protected:
00336 
00337 
00338   ACE_POSIX_Asynch_Write_Stream_Result (const ACE_Handler::Proxy_Ptr &handler_proxy,
00339                                         ACE_HANDLE handle,
00340                                         ACE_Message_Block &message_block,
00341                                         size_t bytes_to_write,
00342                                         const void* act,
00343                                         ACE_HANDLE event,
00344                                         int priority,
00345                                         int signal_number);
00346 
00347 
00348   virtual void complete (size_t bytes_transferred,
00349                          int success,
00350                          const void *completion_key,
00351                          u_long error);
00352 
00353 
00354   virtual ~ACE_POSIX_Asynch_Write_Stream_Result (void);
00355 
00356 protected:
00357   
00358   
00359   
00360 
00361 
00362   ACE_Message_Block &message_block_;
00363 
00364   
00365   
00366 };
00367 
00368 
00369 
00370 
00371 
00372 
00373 
00374 class ACE_Export ACE_POSIX_Asynch_Write_Stream : public virtual ACE_Asynch_Write_Stream_Impl,
00375                                                  public ACE_POSIX_Asynch_Operation
00376 {
00377 public:
00378 
00379   ACE_POSIX_Asynch_Write_Stream (ACE_POSIX_Proactor *posix_proactor);
00380 
00381 
00382 
00383   int write (ACE_Message_Block &message_block,
00384              size_t bytes_to_write,
00385              const void *act,
00386              int priority,
00387              int signal_number = 0);
00388 
00389 
00390   virtual ~ACE_POSIX_Asynch_Write_Stream (void);
00391 };
00392 
00393 
00394 
00395 
00396 
00397 
00398 
00399 class ACE_Export ACE_POSIX_Asynch_Read_File_Result : public virtual ACE_Asynch_Read_File_Result_Impl,
00400                                                      public ACE_POSIX_Asynch_Read_Stream_Result
00401 {
00402 
00403   friend class ACE_POSIX_Asynch_Read_File;
00404 
00405 
00406   friend class ACE_POSIX_Proactor;
00407 
00408 public:
00409 
00410 protected:
00411 
00412 
00413   ACE_POSIX_Asynch_Read_File_Result (const ACE_Handler::Proxy_Ptr &handler_proxy,
00414                                      ACE_HANDLE handle,
00415                                      ACE_Message_Block &message_block,
00416                                      size_t bytes_to_read,
00417                                      const void* act,
00418                                      u_long offset,
00419                                      u_long offset_high,
00420                                      ACE_HANDLE event,
00421                                      int priority,
00422                                      int signal_number);
00423 
00424 
00425   virtual void complete (size_t bytes_transferred,
00426                          int success,
00427                          const void *completion_key,
00428                          u_long error);
00429 
00430 
00431   virtual ~ACE_POSIX_Asynch_Read_File_Result (void);
00432 };
00433 
00434 
00435 
00436 
00437 
00438 
00439 
00440 
00441 
00442 
00443 
00444 
00445 
00446 
00447 
00448 
00449 
00450 class ACE_Export ACE_POSIX_Asynch_Read_File : public virtual ACE_Asynch_Read_File_Impl,
00451                                               public ACE_POSIX_Asynch_Read_Stream
00452 {
00453 
00454 public:
00455 
00456   ACE_POSIX_Asynch_Read_File (ACE_POSIX_Proactor *posix_proactor);
00457 
00458 
00459 
00460 
00461 
00462 
00463   int read (ACE_Message_Block &message_block,
00464             size_t bytes_to_read,
00465             u_long offset,
00466             u_long offset_high,
00467             const void *act,
00468             int priority,
00469             int signal_number = 0);
00470 
00471 
00472   virtual ~ACE_POSIX_Asynch_Read_File (void);
00473 
00474 private:
00475 
00476 
00477 
00478 
00479 
00480   int read (ACE_Message_Block &message_block,
00481             size_t bytes_to_read,
00482             const void *act,
00483             int priority,
00484             int signal_number = 0);
00485 };
00486 
00487 
00488 
00489 
00490 
00491 
00492 
00493 
00494 
00495 
00496 
00497 
00498 
00499 
00500 
00501 
00502 
00503 
00504 
00505 class ACE_Export ACE_POSIX_Asynch_Write_File_Result : public virtual ACE_Asynch_Write_File_Result_Impl,
00506                                                       public ACE_POSIX_Asynch_Write_Stream_Result
00507 {
00508 
00509   friend class ACE_POSIX_Asynch_Write_File;
00510 
00511 
00512   friend class ACE_POSIX_Proactor;
00513 
00514 protected:
00515 
00516 
00517   ACE_POSIX_Asynch_Write_File_Result (const ACE_Handler::Proxy_Ptr &handler_proxy,
00518                                       ACE_HANDLE handle,
00519                                       ACE_Message_Block &message_block,
00520                                       size_t bytes_to_write,
00521                                       const void* act,
00522                                       u_long offset,
00523                                       u_long offset_high,
00524                                       ACE_HANDLE event,
00525                                       int priority,
00526                                       int signal_number);
00527 
00528 
00529   virtual void complete (size_t bytes_transferred,
00530                          int success,
00531                          const void *completion_key,
00532                          u_long error);
00533 
00534 
00535   virtual ~ACE_POSIX_Asynch_Write_File_Result (void);
00536 };
00537 
00538 
00539 
00540 
00541 
00542 
00543 
00544 
00545 
00546 
00547 class ACE_Export ACE_POSIX_Asynch_Write_File : public virtual ACE_Asynch_Write_File_Impl,
00548                                                public ACE_POSIX_Asynch_Write_Stream
00549 {
00550 public:
00551 
00552   ACE_POSIX_Asynch_Write_File (ACE_POSIX_Proactor *posix_proactor);
00553 
00554 
00555 
00556 
00557 
00558 
00559   int write (ACE_Message_Block &message_block,
00560              size_t bytes_to_write,
00561              u_long offset,
00562              u_long offset_high,
00563              const void *act,
00564              int priority,
00565              int signal_number = 0);
00566 
00567 
00568   virtual ~ACE_POSIX_Asynch_Write_File (void);
00569 
00570 private:
00571 
00572 
00573 
00574 
00575 
00576 
00577   int write (ACE_Message_Block &message_block,
00578              size_t bytes_to_write,
00579              const void *act,
00580              int priority,
00581              int signal_number = 0);
00582 };
00583 
00584 
00585 
00586 
00587 
00588 
00589 
00590 
00591 
00592 
00593 
00594 
00595 class ACE_Export ACE_POSIX_Asynch_Accept_Result : public virtual ACE_Asynch_Accept_Result_Impl,
00596                                                   public ACE_POSIX_Asynch_Result
00597 {
00598 
00599   friend class ACE_POSIX_Asynch_Accept;
00600 
00601 
00602   friend class ACE_POSIX_Proactor;
00603 
00604 public:
00605 
00606 
00607   size_t bytes_to_read (void) const;
00608 
00609 
00610   ACE_Message_Block &message_block (void) const;
00611 
00612 
00613   ACE_HANDLE listen_handle (void) const;
00614 
00615 
00616   ACE_HANDLE accept_handle (void) const;
00617 
00618 protected:
00619 
00620 
00621   ACE_POSIX_Asynch_Accept_Result (const ACE_Handler::Proxy_Ptr &handler_proxy,
00622                                   ACE_HANDLE listen_handle,
00623                                   ACE_HANDLE accept_handle,
00624                                   ACE_Message_Block &message_block,
00625                                   size_t bytes_to_read,
00626                                   const void* act,
00627                                   ACE_HANDLE event,
00628                                   int priority,
00629                                   int signal_number);
00630 
00631 
00632   virtual void complete (size_t bytes_transferred,
00633                          int success,
00634                          const void *completion_key,
00635                          u_long error);
00636 
00637 
00638   virtual ~ACE_POSIX_Asynch_Accept_Result (void);
00639 
00640   
00641   
00642   
00643 
00644 
00645   ACE_Message_Block &message_block_;
00646 
00647 
00648   ACE_HANDLE listen_handle_;
00649 
00650   
00651   
00652 };
00653 
00654 
00655 
00656 
00657 
00658 
00659 
00660 
00661 class ACE_Export ACE_POSIX_Asynch_Accept :
00662   public virtual ACE_Asynch_Accept_Impl,
00663   public ACE_POSIX_Asynch_Operation,
00664   public ACE_Event_Handler
00665 {
00666 public:
00667 
00668 
00669   ACE_POSIX_Asynch_Accept (ACE_POSIX_Proactor * posix_proactor);
00670 
00671 
00672   virtual ~ACE_POSIX_Asynch_Accept (void);
00673 
00674 
00675 
00676 
00677 
00678 
00679   int open (const ACE_Handler::Proxy_Ptr &handler_proxy,
00680             ACE_HANDLE handle,
00681             const void *completion_key,
00682             ACE_Proactor *proactor = 0);
00683 
00684 
00685 
00686 
00687 
00688 
00689 
00690 
00691 
00692 
00693 
00694 
00695   int accept (ACE_Message_Block &message_block,
00696               size_t bytes_to_read,
00697               ACE_HANDLE accept_handle,
00698               const void *act,
00699               int priority,
00700               int signal_number = 0,
00701               int addr_family = AF_INET);
00702 
00703 
00704 
00705 
00706 
00707   int cancel (void);
00708 
00709 
00710 
00711 
00712 
00713   int close ();
00714 
00715 
00716   ACE_HANDLE get_handle (void) const;
00717 
00718 
00719   void set_handle (ACE_HANDLE handle);
00720 
00721 
00722 
00723   int handle_input (ACE_HANDLE handle);
00724 
00725 
00726   int handle_close (ACE_HANDLE handle, ACE_Reactor_Mask close_mask);
00727 
00728 private:
00729 
00730 
00731 
00732 
00733 
00734 
00735 
00736   int cancel_uncompleted (int flg_notify);
00737 
00738 
00739 
00740   bool flg_open_ ;
00741 
00742 
00743 
00744   ACE_Unbounded_Queue<ACE_POSIX_Asynch_Accept_Result*> result_queue_;
00745 
00746 
00747 
00748 
00749 
00750   ACE_SYNCH_MUTEX lock_;
00751 };
00752 
00753 
00754 
00755 
00756 
00757 
00758 
00759 
00760 
00761 
00762 
00763 class ACE_Export ACE_POSIX_Asynch_Connect_Result : public virtual ACE_Asynch_Connect_Result_Impl,
00764                                                   public ACE_POSIX_Asynch_Result
00765 {
00766 
00767   friend class ACE_POSIX_Asynch_Connect;
00768 
00769 
00770   friend class ACE_POSIX_Proactor;
00771 
00772 public:
00773 
00774 
00775   ACE_HANDLE connect_handle (void) const;
00776 
00777 protected:
00778 
00779 
00780   ACE_POSIX_Asynch_Connect_Result (const ACE_Handler::Proxy_Ptr &handler_proxy,
00781                                    ACE_HANDLE  connect_handle,
00782                                    const void* act,
00783                                    ACE_HANDLE  event,
00784                                    int priority,
00785                                    int signal_number);
00786 
00787 
00788   virtual void complete (size_t bytes_transferred,
00789                          int success,
00790                          const void *completion_key,
00791                          u_long error);
00792 
00793 
00794   virtual ~ACE_POSIX_Asynch_Connect_Result (void);
00795 
00796   
00797   
00798   void connect_handle (ACE_HANDLE handle);
00799 };
00800 
00801 
00802 
00803 
00804 
00805 
00806 class ACE_Export ACE_POSIX_Asynch_Connect :
00807   public virtual ACE_Asynch_Connect_Impl,
00808   public ACE_POSIX_Asynch_Operation,
00809   public ACE_Event_Handler
00810 {
00811 public:
00812 
00813 
00814   ACE_POSIX_Asynch_Connect (ACE_POSIX_Proactor * posix_proactor);
00815 
00816 
00817   virtual ~ACE_POSIX_Asynch_Connect (void);
00818 
00819 
00820 
00821 
00822 
00823 
00824   int open (const ACE_Handler::Proxy_Ptr &handler_proxy,
00825             ACE_HANDLE handle,
00826             const void *completion_key,
00827             ACE_Proactor *proactor = 0);
00828 
00829 
00830 
00831 
00832 
00833 
00834 
00835 
00836   int connect (ACE_HANDLE connect_handle,
00837                const ACE_Addr &remote_sap,
00838                const ACE_Addr &local_sap,
00839                int reuse_addr,
00840                const void *act,
00841                int priority,
00842                int signal_number = 0);
00843 
00844 
00845 
00846 
00847 
00848   int cancel (void);
00849 
00850 
00851 
00852 
00853   int close (void);
00854 
00855 
00856   ACE_HANDLE get_handle (void) const;
00857 
00858 
00859   void set_handle (ACE_HANDLE handle);
00860 
00861 
00862 
00863 
00864 
00865   int handle_output (ACE_HANDLE handle);
00866 
00867 
00868   int handle_close (ACE_HANDLE handle, ACE_Reactor_Mask close_mask) ;
00869 
00870 private:
00871   int connect_i (ACE_POSIX_Asynch_Connect_Result *result,
00872                  const ACE_Addr & remote_sap,
00873                  const ACE_Addr & local_sap,
00874                  int reuse_addr);
00875 
00876   int post_result (ACE_POSIX_Asynch_Connect_Result *result, bool flg_post);
00877 
00878 
00879 
00880 
00881 
00882 
00883 
00884 
00885 
00886 
00887   int cancel_uncompleted (bool flg_notify, ACE_Handle_Set &set);
00888 
00889   bool flg_open_ ;
00890 
00891 
00892 
00893   typedef ACE_Map_Manager<ACE_HANDLE, ACE_POSIX_Asynch_Connect_Result *, ACE_SYNCH_NULL_MUTEX>
00894           MAP_MANAGER;
00895 
00896 
00897   typedef MAP_MANAGER::ITERATOR MAP_ITERATOR;
00898   typedef MAP_MANAGER::ENTRY MAP_ENTRY;
00899 
00900 
00901   MAP_MANAGER result_map_;
00902 
00903 
00904 
00905 
00906   ACE_SYNCH_MUTEX lock_;
00907 };
00908 
00909 
00910 
00911 
00912 
00913 
00914 
00915 
00916 
00917 
00918 
00919 
00920 class ACE_Export ACE_POSIX_Asynch_Transmit_File_Result : public virtual ACE_Asynch_Transmit_File_Result_Impl,
00921                                                          public ACE_POSIX_Asynch_Result
00922 {
00923 
00924   friend class ACE_POSIX_Asynch_Transmit_File;
00925 
00926 
00927   friend class ACE_POSIX_Asynch_Transmit_Handler;
00928 
00929 
00930   friend class ACE_POSIX_Proactor;
00931 
00932 public:
00933 
00934   ACE_HANDLE socket (void) const;
00935 
00936 
00937   ACE_HANDLE file (void) const;
00938 
00939 
00940   ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer (void) const;
00941 
00942 
00943 
00944   size_t bytes_to_write (void) const;
00945 
00946 
00947 
00948   size_t bytes_per_send (void) const;
00949 
00950 
00951   u_long flags (void) const;
00952 
00953 protected:
00954   ACE_POSIX_Asynch_Transmit_File_Result (const ACE_Handler::Proxy_Ptr &handler_proxy,
00955                                          ACE_HANDLE socket,
00956                                          ACE_HANDLE file,
00957                                          ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer,
00958                                          size_t bytes_to_write,
00959                                          u_long offset,
00960                                          u_long offset_high,
00961                                          size_t bytes_per_send,
00962                                          u_long flags,
00963                                          const void *act,
00964                                          ACE_HANDLE event,
00965                                          int priority,
00966                                          int signal_number);
00967   
00968   
00969 
00970 
00971   virtual void complete (size_t bytes_transferred,
00972                          int success,
00973                          const void *completion_key,
00974                          u_long error);
00975 
00976 
00977   virtual ~ACE_POSIX_Asynch_Transmit_File_Result (void);
00978 
00979 
00980   ACE_HANDLE socket_;
00981 
00982   
00983   
00984 
00985 
00986   ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer_;
00987 
00988   
00989   
00990   
00991 
00992 
00993 
00994   size_t bytes_per_send_;
00995 
00996 
00997   u_long flags_;
00998 };
00999 
01000 
01001 
01002 
01003 
01004 
01005 
01006 class ACE_Export ACE_POSIX_Asynch_Transmit_File : public virtual ACE_Asynch_Transmit_File_Impl,
01007                                                   public ACE_POSIX_Asynch_Operation
01008 {
01009 public:
01010 
01011   ACE_POSIX_Asynch_Transmit_File (ACE_POSIX_Proactor *posix_proactor);
01012 
01013 
01014 
01015 
01016 
01017 
01018 
01019 
01020 
01021 
01022 
01023 
01024   int transmit_file (ACE_HANDLE file,
01025                      ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer,
01026                      size_t bytes_to_write,
01027                      u_long offset,
01028                      u_long offset_high,
01029                      size_t bytes_per_send,
01030                      u_long flags,
01031                      const void *act,
01032                      int priority,
01033                      int signal_number = 0);
01034 
01035 
01036   virtual ~ACE_POSIX_Asynch_Transmit_File (void);
01037 };
01038 
01039 
01040 
01041 
01042 
01043 
01044 
01045 
01046 
01047 
01048 
01049 
01050 
01051 
01052 
01053 class ACE_Export ACE_POSIX_Asynch_Read_Dgram : public virtual ACE_Asynch_Read_Dgram_Impl,
01054                                                public ACE_POSIX_Asynch_Operation
01055 {
01056 public:
01057 
01058   ACE_POSIX_Asynch_Read_Dgram (ACE_POSIX_Proactor *posix_proactor);
01059   virtual ~ACE_POSIX_Asynch_Read_Dgram (void);
01060 
01061 
01062 
01063 
01064 
01065 
01066 
01067 
01068 
01069 
01070 
01071 
01072 
01073 
01074 
01075 
01076 
01077 
01078 
01079 
01080 
01081 
01082   virtual ssize_t recv (ACE_Message_Block *message_block,
01083                         size_t &number_of_bytes_recvd,
01084                         int flags,
01085                         int protocol_family,
01086                         const void *act,
01087                         int priority,
01088                         int signal_number);
01089 
01090 protected:
01091 
01092   ACE_POSIX_Asynch_Read_Dgram (void);
01093 };
01094 
01095 
01096 
01097 
01098 
01099 
01100 
01101 class ACE_Export ACE_POSIX_Asynch_Write_Dgram_Result : public virtual ACE_Asynch_Write_Dgram_Result_Impl,
01102                                                        public ACE_POSIX_Asynch_Result
01103 {
01104 
01105   friend class ACE_POSIX_Asynch_Write_Dgram;
01106 
01107 
01108   friend class ACE_POSIX_Proactor;
01109 
01110 public:
01111 
01112 
01113   size_t bytes_to_write (void) const;
01114 
01115 
01116   ACE_Message_Block *message_block (void) const;
01117 
01118 
01119   int flags (void) const;
01120 
01121 
01122   ACE_HANDLE handle (void) const;
01123 
01124 protected:
01125 
01126 
01127   ACE_POSIX_Asynch_Write_Dgram_Result (const ACE_Handler::Proxy_Ptr &handler_proxy,
01128                                        ACE_HANDLE handle,
01129                                        ACE_Message_Block *message_block,
01130                                        size_t bytes_to_write,
01131                                        int flags,
01132                                        const void* act,
01133                                        ACE_HANDLE event,
01134                                        int priority,
01135                                        int signal_number);
01136 
01137 
01138   virtual void complete (size_t bytes_transferred,
01139                          int success,
01140                          const void *completion_key,
01141                          u_long error);
01142 
01143 
01144   virtual ~ACE_POSIX_Asynch_Write_Dgram_Result (void);
01145 
01146 
01147 
01148   size_t bytes_to_write_;
01149 
01150 
01151   ACE_Message_Block *message_block_;
01152 
01153 
01154   int flags_;
01155 
01156 
01157   ACE_HANDLE handle_;
01158 
01159   };
01160 
01161 
01162 
01163 
01164 
01165 
01166 
01167 
01168 
01169 
01170 
01171 
01172 
01173 
01174 
01175 class ACE_Export ACE_POSIX_Asynch_Write_Dgram : public virtual ACE_Asynch_Write_Dgram_Impl,
01176                                                 public ACE_POSIX_Asynch_Operation
01177 {
01178 public:
01179 
01180   ACE_POSIX_Asynch_Write_Dgram (ACE_POSIX_Proactor *posix_proactor);
01181 
01182 
01183   virtual ~ACE_POSIX_Asynch_Write_Dgram (void);
01184 
01185 
01186 
01187 
01188 
01189 
01190 
01191 
01192 
01193 
01194 
01195 
01196 
01197 
01198 
01199 
01200 
01201 
01202 
01203 
01204 
01205 
01206   virtual ssize_t send (ACE_Message_Block *message_block,
01207                         size_t &number_of_bytes_sent,
01208                         int flags,
01209                         const ACE_Addr &addr,
01210                         const void *act,
01211                         int priority,
01212                         int signal_number);
01213 
01214 protected:
01215 
01216   ACE_POSIX_Asynch_Write_Dgram (void);
01217 };
01218 
01219 
01220 
01221 
01222 
01223 
01224 
01225 
01226 
01227 
01228 class ACE_Export ACE_POSIX_Asynch_Read_Dgram_Result : public virtual ACE_Asynch_Read_Dgram_Result_Impl,
01229                                                       public virtual ACE_POSIX_Asynch_Result
01230 {
01231 
01232 
01233   friend class ACE_POSIX_Asynch_Read_Dgram;
01234 
01235 
01236   friend class ACE_POSIX_Proactor;
01237 
01238 public:
01239 
01240 
01241   size_t bytes_to_read (void) const;
01242 
01243 
01244   ACE_Message_Block *message_block (void) const;
01245 
01246 
01247   int remote_address (ACE_Addr& addr) const;
01248 
01249   sockaddr *saddr (void) const;
01250 
01251 
01252   int flags (void) const;
01253 
01254 
01255   ACE_HANDLE handle (void) const;
01256 
01257 protected:
01258 
01259 
01260   ACE_POSIX_Asynch_Read_Dgram_Result (const ACE_Handler::Proxy_Ptr &handler_proxy,
01261                                       ACE_HANDLE handle,
01262                                       ACE_Message_Block *message_block,
01263                                       size_t bytes_to_read,
01264                                       int flags,
01265                                       int protocol_family,
01266                                       const void* act,
01267                                       ACE_HANDLE event,
01268                                       int priority,
01269                                       int signal_number = 0);
01270 
01271 
01272   virtual void complete (size_t bytes_transferred,
01273                          int success,
01274                          const void *completion_key,
01275                          u_long error);
01276 
01277 
01278   virtual ~ACE_POSIX_Asynch_Read_Dgram_Result (void);
01279 
01280 
01281   size_t bytes_to_read_;
01282 
01283 
01284   ACE_Message_Block *message_block_;
01285 
01286 
01287   ACE_Addr *remote_address_;
01288 
01289   int addr_len_;
01290 
01291 
01292   int flags_;
01293 
01294 
01295   ACE_HANDLE handle_;
01296 
01297 };
01298 
01299 ACE_END_VERSIONED_NAMESPACE_DECL
01300 
01301 #endif 
01302 #endif