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