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