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