write_at.cpp 237 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563
  1. //
  2. // write_at.cpp
  3. // ~~~~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2019 Christopher M. Kohlhoff (chris at kohlhoff dot com)
  6. //
  7. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  8. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  9. //
  10. // Disable autolinking for unit tests.
  11. #if !defined(BOOST_ALL_NO_LIB)
  12. #define BOOST_ALL_NO_LIB 1
  13. #endif // !defined(BOOST_ALL_NO_LIB)
  14. // Test that header file is self-contained.
  15. #include <boost/asio/write_at.hpp>
  16. #include <cstring>
  17. #include "archetypes/async_result.hpp"
  18. #include <boost/asio/io_context.hpp>
  19. #include <boost/asio/post.hpp>
  20. #include <boost/asio/streambuf.hpp>
  21. #include "unit_test.hpp"
  22. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  23. # include <boost/bind.hpp>
  24. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  25. # include <functional>
  26. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  27. #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  28. #include <boost/array.hpp>
  29. #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  30. #if defined(BOOST_ASIO_HAS_STD_ARRAY)
  31. # include <array>
  32. #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
  33. using namespace std; // For memcmp, memcpy and memset.
  34. class test_random_access_device
  35. {
  36. public:
  37. typedef boost::asio::io_context::executor_type executor_type;
  38. test_random_access_device(boost::asio::io_context& io_context)
  39. : io_context_(io_context),
  40. length_(max_length),
  41. next_write_length_(max_length)
  42. {
  43. memset(data_, 0, max_length);
  44. }
  45. executor_type get_executor() BOOST_ASIO_NOEXCEPT
  46. {
  47. return io_context_.get_executor();
  48. }
  49. void reset()
  50. {
  51. memset(data_, 0, max_length);
  52. next_write_length_ = max_length;
  53. }
  54. void next_write_length(size_t length)
  55. {
  56. next_write_length_ = length;
  57. }
  58. template <typename Iterator>
  59. bool check_buffers(boost::asio::uint64_t offset,
  60. Iterator begin, Iterator end, size_t length)
  61. {
  62. if (offset + length > max_length)
  63. return false;
  64. Iterator iter = begin;
  65. size_t checked_length = 0;
  66. for (; iter != end && checked_length < length; ++iter)
  67. {
  68. size_t buffer_length = boost::asio::buffer_size(*iter);
  69. if (buffer_length > length - checked_length)
  70. buffer_length = length - checked_length;
  71. if (memcmp(data_ + offset + checked_length,
  72. iter->data(), buffer_length) != 0)
  73. return false;
  74. checked_length += buffer_length;
  75. }
  76. return true;
  77. }
  78. template <typename Const_Buffers>
  79. bool check_buffers(boost::asio::uint64_t offset,
  80. const Const_Buffers& buffers, size_t length)
  81. {
  82. return check_buffers(offset, boost::asio::buffer_sequence_begin(buffers),
  83. boost::asio::buffer_sequence_end(buffers), length);
  84. }
  85. template <typename Const_Buffers>
  86. size_t write_some_at(boost::asio::uint64_t offset,
  87. const Const_Buffers& buffers)
  88. {
  89. return boost::asio::buffer_copy(
  90. boost::asio::buffer(data_, length_) + offset,
  91. buffers, next_write_length_);
  92. }
  93. template <typename Const_Buffers>
  94. size_t write_some_at(boost::asio::uint64_t offset,
  95. const Const_Buffers& buffers, boost::system::error_code& ec)
  96. {
  97. ec = boost::system::error_code();
  98. return write_some_at(offset, buffers);
  99. }
  100. template <typename Const_Buffers, typename Handler>
  101. void async_write_some_at(boost::asio::uint64_t offset,
  102. const Const_Buffers& buffers, BOOST_ASIO_MOVE_ARG(Handler) handler)
  103. {
  104. size_t bytes_transferred = write_some_at(offset, buffers);
  105. boost::asio::post(get_executor(),
  106. boost::asio::detail::bind_handler(
  107. BOOST_ASIO_MOVE_CAST(Handler)(handler),
  108. boost::system::error_code(), bytes_transferred));
  109. }
  110. private:
  111. boost::asio::io_context& io_context_;
  112. enum { max_length = 8192 };
  113. char data_[max_length];
  114. size_t length_;
  115. size_t next_write_length_;
  116. };
  117. static const char write_data[]
  118. = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  119. static char mutable_write_data[]
  120. = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  121. void test_3_arg_const_buffer_write_at()
  122. {
  123. boost::asio::io_context ioc;
  124. test_random_access_device s(ioc);
  125. boost::asio::const_buffer buffers
  126. = boost::asio::buffer(write_data, sizeof(write_data));
  127. s.reset();
  128. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers);
  129. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  130. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  131. s.reset();
  132. bytes_transferred = boost::asio::write_at(s, 1234, buffers);
  133. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  134. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  135. s.reset();
  136. s.next_write_length(1);
  137. bytes_transferred = boost::asio::write_at(s, 0, buffers);
  138. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  139. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  140. s.reset();
  141. s.next_write_length(1);
  142. bytes_transferred = boost::asio::write_at(s, 1234, buffers);
  143. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  144. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  145. s.reset();
  146. s.next_write_length(10);
  147. bytes_transferred = boost::asio::write_at(s, 0, buffers);
  148. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  149. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  150. s.reset();
  151. s.next_write_length(10);
  152. bytes_transferred = boost::asio::write_at(s, 1234, buffers);
  153. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  154. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  155. }
  156. void test_3_arg_mutable_buffer_write_at()
  157. {
  158. boost::asio::io_context ioc;
  159. test_random_access_device s(ioc);
  160. boost::asio::mutable_buffer buffers
  161. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  162. s.reset();
  163. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers);
  164. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  165. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  166. s.reset();
  167. bytes_transferred = boost::asio::write_at(s, 1234, buffers);
  168. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  169. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  170. s.reset();
  171. s.next_write_length(1);
  172. bytes_transferred = boost::asio::write_at(s, 0, buffers);
  173. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  174. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  175. s.reset();
  176. s.next_write_length(1);
  177. bytes_transferred = boost::asio::write_at(s, 1234, buffers);
  178. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  179. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  180. s.reset();
  181. s.next_write_length(10);
  182. bytes_transferred = boost::asio::write_at(s, 0, buffers);
  183. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  184. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  185. s.reset();
  186. s.next_write_length(10);
  187. bytes_transferred = boost::asio::write_at(s, 1234, buffers);
  188. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  189. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  190. }
  191. void test_3_arg_vector_buffers_write_at()
  192. {
  193. boost::asio::io_context ioc;
  194. test_random_access_device s(ioc);
  195. std::vector<boost::asio::const_buffer> buffers;
  196. buffers.push_back(boost::asio::buffer(write_data, 32));
  197. buffers.push_back(boost::asio::buffer(write_data) + 32);
  198. s.reset();
  199. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers);
  200. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  201. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  202. s.reset();
  203. bytes_transferred = boost::asio::write_at(s, 1234, buffers);
  204. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  205. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  206. s.reset();
  207. s.next_write_length(1);
  208. bytes_transferred = boost::asio::write_at(s, 0, buffers);
  209. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  210. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  211. s.reset();
  212. s.next_write_length(1);
  213. bytes_transferred = boost::asio::write_at(s, 1234, buffers);
  214. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  215. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  216. s.reset();
  217. s.next_write_length(10);
  218. bytes_transferred = boost::asio::write_at(s, 0, buffers);
  219. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  220. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  221. s.reset();
  222. s.next_write_length(10);
  223. bytes_transferred = boost::asio::write_at(s, 1234, buffers);
  224. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  225. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  226. }
  227. void test_4_arg_nothrow_const_buffer_write_at()
  228. {
  229. boost::asio::io_context ioc;
  230. test_random_access_device s(ioc);
  231. boost::asio::const_buffer buffers
  232. = boost::asio::buffer(write_data, sizeof(write_data));
  233. s.reset();
  234. boost::system::error_code error;
  235. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers, error);
  236. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  237. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  238. BOOST_ASIO_CHECK(!error);
  239. s.reset();
  240. bytes_transferred = boost::asio::write_at(s, 1234, buffers, error);
  241. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  242. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  243. BOOST_ASIO_CHECK(!error);
  244. s.reset();
  245. s.next_write_length(1);
  246. bytes_transferred = boost::asio::write_at(s, 0, buffers, error);
  247. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  248. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  249. BOOST_ASIO_CHECK(!error);
  250. s.reset();
  251. s.next_write_length(1);
  252. bytes_transferred = boost::asio::write_at(s, 1234, buffers, error);
  253. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  254. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  255. BOOST_ASIO_CHECK(!error);
  256. s.reset();
  257. s.next_write_length(10);
  258. bytes_transferred = boost::asio::write_at(s, 0, buffers, error);
  259. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  260. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  261. BOOST_ASIO_CHECK(!error);
  262. s.reset();
  263. s.next_write_length(10);
  264. bytes_transferred = boost::asio::write_at(s, 1234, buffers, error);
  265. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  266. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  267. BOOST_ASIO_CHECK(!error);
  268. }
  269. void test_4_arg_nothrow_mutable_buffer_write_at()
  270. {
  271. boost::asio::io_context ioc;
  272. test_random_access_device s(ioc);
  273. boost::asio::mutable_buffer buffers
  274. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  275. s.reset();
  276. boost::system::error_code error;
  277. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers, error);
  278. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  279. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  280. BOOST_ASIO_CHECK(!error);
  281. s.reset();
  282. bytes_transferred = boost::asio::write_at(s, 1234, buffers, error);
  283. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  284. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  285. BOOST_ASIO_CHECK(!error);
  286. s.reset();
  287. s.next_write_length(1);
  288. bytes_transferred = boost::asio::write_at(s, 0, buffers, error);
  289. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  290. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  291. BOOST_ASIO_CHECK(!error);
  292. s.reset();
  293. s.next_write_length(1);
  294. bytes_transferred = boost::asio::write_at(s, 1234, buffers, error);
  295. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  296. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  297. BOOST_ASIO_CHECK(!error);
  298. s.reset();
  299. s.next_write_length(10);
  300. bytes_transferred = boost::asio::write_at(s, 0, buffers, error);
  301. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  302. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  303. BOOST_ASIO_CHECK(!error);
  304. s.reset();
  305. s.next_write_length(10);
  306. bytes_transferred = boost::asio::write_at(s, 1234, buffers, error);
  307. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  308. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  309. BOOST_ASIO_CHECK(!error);
  310. }
  311. void test_4_arg_nothrow_vector_buffers_write_at()
  312. {
  313. boost::asio::io_context ioc;
  314. test_random_access_device s(ioc);
  315. std::vector<boost::asio::const_buffer> buffers;
  316. buffers.push_back(boost::asio::buffer(write_data, 32));
  317. buffers.push_back(boost::asio::buffer(write_data) + 32);
  318. s.reset();
  319. boost::system::error_code error;
  320. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers, error);
  321. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  322. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  323. BOOST_ASIO_CHECK(!error);
  324. s.reset();
  325. bytes_transferred = boost::asio::write_at(s, 1234, buffers, error);
  326. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  327. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  328. BOOST_ASIO_CHECK(!error);
  329. s.reset();
  330. s.next_write_length(1);
  331. bytes_transferred = boost::asio::write_at(s, 0, buffers, error);
  332. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  333. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  334. BOOST_ASIO_CHECK(!error);
  335. s.reset();
  336. s.next_write_length(1);
  337. bytes_transferred = boost::asio::write_at(s, 1234, buffers, error);
  338. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  339. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  340. BOOST_ASIO_CHECK(!error);
  341. s.reset();
  342. s.next_write_length(10);
  343. bytes_transferred = boost::asio::write_at(s, 0, buffers, error);
  344. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  345. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  346. BOOST_ASIO_CHECK(!error);
  347. s.reset();
  348. s.next_write_length(10);
  349. bytes_transferred = boost::asio::write_at(s, 1234, buffers, error);
  350. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  351. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  352. BOOST_ASIO_CHECK(!error);
  353. }
  354. bool old_style_transfer_all(const boost::system::error_code& ec,
  355. size_t /*bytes_transferred*/)
  356. {
  357. return !!ec;
  358. }
  359. struct short_transfer
  360. {
  361. short_transfer() {}
  362. #if defined(BOOST_ASIO_HAS_MOVE)
  363. short_transfer(short_transfer&&) {}
  364. #else // defined(BOOST_ASIO_HAS_MOVE)
  365. short_transfer(const short_transfer&) {}
  366. #endif // defined(BOOST_ASIO_HAS_MOVE)
  367. size_t operator()(const boost::system::error_code& ec,
  368. size_t /*bytes_transferred*/)
  369. {
  370. return !!ec ? 0 : 3;
  371. }
  372. };
  373. void test_4_arg_const_buffer_write_at()
  374. {
  375. boost::asio::io_context ioc;
  376. test_random_access_device s(ioc);
  377. boost::asio::const_buffer buffers
  378. = boost::asio::buffer(write_data, sizeof(write_data));
  379. s.reset();
  380. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers,
  381. boost::asio::transfer_all());
  382. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  383. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  384. s.reset();
  385. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  386. boost::asio::transfer_all());
  387. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  388. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  389. s.reset();
  390. s.next_write_length(1);
  391. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  392. boost::asio::transfer_all());
  393. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  394. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  395. s.reset();
  396. s.next_write_length(1);
  397. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  398. boost::asio::transfer_all());
  399. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  400. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  401. s.reset();
  402. s.next_write_length(10);
  403. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  404. boost::asio::transfer_all());
  405. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  406. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  407. s.reset();
  408. s.next_write_length(10);
  409. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  410. boost::asio::transfer_all());
  411. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  412. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  413. s.reset();
  414. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  415. boost::asio::transfer_at_least(1));
  416. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  417. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  418. s.reset();
  419. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  420. boost::asio::transfer_at_least(1));
  421. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  422. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  423. s.reset();
  424. s.next_write_length(1);
  425. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  426. boost::asio::transfer_at_least(1));
  427. BOOST_ASIO_CHECK(bytes_transferred == 1);
  428. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  429. s.reset();
  430. s.next_write_length(1);
  431. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  432. boost::asio::transfer_at_least(1));
  433. BOOST_ASIO_CHECK(bytes_transferred == 1);
  434. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  435. s.reset();
  436. s.next_write_length(10);
  437. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  438. boost::asio::transfer_at_least(1));
  439. BOOST_ASIO_CHECK(bytes_transferred == 10);
  440. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  441. s.reset();
  442. s.next_write_length(10);
  443. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  444. boost::asio::transfer_at_least(1));
  445. BOOST_ASIO_CHECK(bytes_transferred == 10);
  446. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  447. s.reset();
  448. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  449. boost::asio::transfer_at_least(10));
  450. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  451. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  452. s.reset();
  453. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  454. boost::asio::transfer_at_least(10));
  455. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  456. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  457. s.reset();
  458. s.next_write_length(1);
  459. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  460. boost::asio::transfer_at_least(10));
  461. BOOST_ASIO_CHECK(bytes_transferred == 10);
  462. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  463. s.reset();
  464. s.next_write_length(1);
  465. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  466. boost::asio::transfer_at_least(10));
  467. BOOST_ASIO_CHECK(bytes_transferred == 10);
  468. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  469. s.reset();
  470. s.next_write_length(10);
  471. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  472. boost::asio::transfer_at_least(10));
  473. BOOST_ASIO_CHECK(bytes_transferred == 10);
  474. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  475. s.reset();
  476. s.next_write_length(10);
  477. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  478. boost::asio::transfer_at_least(10));
  479. BOOST_ASIO_CHECK(bytes_transferred == 10);
  480. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  481. s.reset();
  482. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  483. boost::asio::transfer_at_least(42));
  484. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  485. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  486. s.reset();
  487. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  488. boost::asio::transfer_at_least(42));
  489. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  490. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  491. s.reset();
  492. s.next_write_length(1);
  493. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  494. boost::asio::transfer_at_least(42));
  495. BOOST_ASIO_CHECK(bytes_transferred == 42);
  496. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  497. s.reset();
  498. s.next_write_length(1);
  499. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  500. boost::asio::transfer_at_least(42));
  501. BOOST_ASIO_CHECK(bytes_transferred == 42);
  502. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  503. s.reset();
  504. s.next_write_length(10);
  505. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  506. boost::asio::transfer_at_least(42));
  507. BOOST_ASIO_CHECK(bytes_transferred == 50);
  508. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  509. s.reset();
  510. s.next_write_length(10);
  511. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  512. boost::asio::transfer_at_least(42));
  513. BOOST_ASIO_CHECK(bytes_transferred == 50);
  514. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  515. s.reset();
  516. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  517. boost::asio::transfer_exactly(1));
  518. BOOST_ASIO_CHECK(bytes_transferred == 1);
  519. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  520. s.reset();
  521. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  522. boost::asio::transfer_exactly(1));
  523. BOOST_ASIO_CHECK(bytes_transferred == 1);
  524. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  525. s.reset();
  526. s.next_write_length(1);
  527. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  528. boost::asio::transfer_exactly(1));
  529. BOOST_ASIO_CHECK(bytes_transferred == 1);
  530. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  531. s.reset();
  532. s.next_write_length(1);
  533. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  534. boost::asio::transfer_exactly(1));
  535. BOOST_ASIO_CHECK(bytes_transferred == 1);
  536. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  537. s.reset();
  538. s.next_write_length(10);
  539. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  540. boost::asio::transfer_exactly(1));
  541. BOOST_ASIO_CHECK(bytes_transferred == 1);
  542. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  543. s.reset();
  544. s.next_write_length(10);
  545. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  546. boost::asio::transfer_exactly(1));
  547. BOOST_ASIO_CHECK(bytes_transferred == 1);
  548. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  549. s.reset();
  550. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  551. boost::asio::transfer_exactly(10));
  552. BOOST_ASIO_CHECK(bytes_transferred == 10);
  553. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  554. s.reset();
  555. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  556. boost::asio::transfer_exactly(10));
  557. BOOST_ASIO_CHECK(bytes_transferred == 10);
  558. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  559. s.reset();
  560. s.next_write_length(1);
  561. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  562. boost::asio::transfer_exactly(10));
  563. BOOST_ASIO_CHECK(bytes_transferred == 10);
  564. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  565. s.reset();
  566. s.next_write_length(1);
  567. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  568. boost::asio::transfer_exactly(10));
  569. BOOST_ASIO_CHECK(bytes_transferred == 10);
  570. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  571. s.reset();
  572. s.next_write_length(10);
  573. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  574. boost::asio::transfer_exactly(10));
  575. BOOST_ASIO_CHECK(bytes_transferred == 10);
  576. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  577. s.reset();
  578. s.next_write_length(10);
  579. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  580. boost::asio::transfer_exactly(10));
  581. BOOST_ASIO_CHECK(bytes_transferred == 10);
  582. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  583. s.reset();
  584. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  585. boost::asio::transfer_exactly(42));
  586. BOOST_ASIO_CHECK(bytes_transferred == 42);
  587. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  588. s.reset();
  589. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  590. boost::asio::transfer_exactly(42));
  591. BOOST_ASIO_CHECK(bytes_transferred == 42);
  592. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  593. s.reset();
  594. s.next_write_length(1);
  595. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  596. boost::asio::transfer_exactly(42));
  597. BOOST_ASIO_CHECK(bytes_transferred == 42);
  598. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  599. s.reset();
  600. s.next_write_length(1);
  601. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  602. boost::asio::transfer_exactly(42));
  603. BOOST_ASIO_CHECK(bytes_transferred == 42);
  604. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  605. s.reset();
  606. s.next_write_length(10);
  607. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  608. boost::asio::transfer_exactly(42));
  609. BOOST_ASIO_CHECK(bytes_transferred == 42);
  610. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  611. s.reset();
  612. s.next_write_length(10);
  613. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  614. boost::asio::transfer_exactly(42));
  615. BOOST_ASIO_CHECK(bytes_transferred == 42);
  616. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  617. s.reset();
  618. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  619. old_style_transfer_all);
  620. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  621. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  622. s.reset();
  623. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  624. old_style_transfer_all);
  625. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  626. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  627. s.reset();
  628. s.next_write_length(1);
  629. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  630. old_style_transfer_all);
  631. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  632. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  633. s.reset();
  634. s.next_write_length(1);
  635. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  636. old_style_transfer_all);
  637. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  638. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  639. s.reset();
  640. s.next_write_length(10);
  641. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  642. old_style_transfer_all);
  643. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  644. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  645. s.reset();
  646. s.next_write_length(10);
  647. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  648. old_style_transfer_all);
  649. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  650. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  651. s.reset();
  652. bytes_transferred = boost::asio::write_at(s, 0, buffers, short_transfer());
  653. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  654. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  655. s.reset();
  656. bytes_transferred = boost::asio::write_at(s, 1234, buffers, short_transfer());
  657. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  658. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  659. s.reset();
  660. s.next_write_length(1);
  661. bytes_transferred = boost::asio::write_at(s, 0, buffers, short_transfer());
  662. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  663. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  664. s.reset();
  665. s.next_write_length(1);
  666. bytes_transferred = boost::asio::write_at(s, 1234, buffers, short_transfer());
  667. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  668. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  669. s.reset();
  670. s.next_write_length(10);
  671. bytes_transferred = boost::asio::write_at(s, 0, buffers, short_transfer());
  672. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  673. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  674. s.reset();
  675. s.next_write_length(10);
  676. bytes_transferred = boost::asio::write_at(s, 1234, buffers, short_transfer());
  677. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  678. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  679. }
  680. void test_4_arg_mutable_buffer_write_at()
  681. {
  682. boost::asio::io_context ioc;
  683. test_random_access_device s(ioc);
  684. boost::asio::mutable_buffer buffers
  685. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  686. s.reset();
  687. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers,
  688. boost::asio::transfer_all());
  689. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  690. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  691. s.reset();
  692. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  693. boost::asio::transfer_all());
  694. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  695. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  696. s.reset();
  697. s.next_write_length(1);
  698. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  699. boost::asio::transfer_all());
  700. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  701. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  702. s.reset();
  703. s.next_write_length(1);
  704. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  705. boost::asio::transfer_all());
  706. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  707. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  708. s.reset();
  709. s.next_write_length(10);
  710. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  711. boost::asio::transfer_all());
  712. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  713. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  714. s.reset();
  715. s.next_write_length(10);
  716. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  717. boost::asio::transfer_all());
  718. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  719. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  720. s.reset();
  721. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  722. boost::asio::transfer_at_least(1));
  723. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  724. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  725. s.reset();
  726. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  727. boost::asio::transfer_at_least(1));
  728. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  729. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  730. s.reset();
  731. s.next_write_length(1);
  732. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  733. boost::asio::transfer_at_least(1));
  734. BOOST_ASIO_CHECK(bytes_transferred == 1);
  735. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  736. s.reset();
  737. s.next_write_length(1);
  738. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  739. boost::asio::transfer_at_least(1));
  740. BOOST_ASIO_CHECK(bytes_transferred == 1);
  741. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  742. s.reset();
  743. s.next_write_length(10);
  744. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  745. boost::asio::transfer_at_least(1));
  746. BOOST_ASIO_CHECK(bytes_transferred == 10);
  747. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  748. s.reset();
  749. s.next_write_length(10);
  750. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  751. boost::asio::transfer_at_least(1));
  752. BOOST_ASIO_CHECK(bytes_transferred == 10);
  753. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  754. s.reset();
  755. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  756. boost::asio::transfer_at_least(10));
  757. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  758. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  759. s.reset();
  760. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  761. boost::asio::transfer_at_least(10));
  762. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  763. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  764. s.reset();
  765. s.next_write_length(1);
  766. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  767. boost::asio::transfer_at_least(10));
  768. BOOST_ASIO_CHECK(bytes_transferred == 10);
  769. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  770. s.reset();
  771. s.next_write_length(1);
  772. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  773. boost::asio::transfer_at_least(10));
  774. BOOST_ASIO_CHECK(bytes_transferred == 10);
  775. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  776. s.reset();
  777. s.next_write_length(10);
  778. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  779. boost::asio::transfer_at_least(10));
  780. BOOST_ASIO_CHECK(bytes_transferred == 10);
  781. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  782. s.reset();
  783. s.next_write_length(10);
  784. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  785. boost::asio::transfer_at_least(10));
  786. BOOST_ASIO_CHECK(bytes_transferred == 10);
  787. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  788. s.reset();
  789. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  790. boost::asio::transfer_at_least(42));
  791. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  792. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  793. s.reset();
  794. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  795. boost::asio::transfer_at_least(42));
  796. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  797. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  798. s.reset();
  799. s.next_write_length(1);
  800. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  801. boost::asio::transfer_at_least(42));
  802. BOOST_ASIO_CHECK(bytes_transferred == 42);
  803. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  804. s.reset();
  805. s.next_write_length(1);
  806. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  807. boost::asio::transfer_at_least(42));
  808. BOOST_ASIO_CHECK(bytes_transferred == 42);
  809. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  810. s.reset();
  811. s.next_write_length(10);
  812. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  813. boost::asio::transfer_at_least(42));
  814. BOOST_ASIO_CHECK(bytes_transferred == 50);
  815. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  816. s.reset();
  817. s.next_write_length(10);
  818. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  819. boost::asio::transfer_at_least(42));
  820. BOOST_ASIO_CHECK(bytes_transferred == 50);
  821. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  822. s.reset();
  823. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  824. boost::asio::transfer_exactly(1));
  825. BOOST_ASIO_CHECK(bytes_transferred == 1);
  826. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  827. s.reset();
  828. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  829. boost::asio::transfer_exactly(1));
  830. BOOST_ASIO_CHECK(bytes_transferred == 1);
  831. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  832. s.reset();
  833. s.next_write_length(1);
  834. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  835. boost::asio::transfer_exactly(1));
  836. BOOST_ASIO_CHECK(bytes_transferred == 1);
  837. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  838. s.reset();
  839. s.next_write_length(1);
  840. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  841. boost::asio::transfer_exactly(1));
  842. BOOST_ASIO_CHECK(bytes_transferred == 1);
  843. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  844. s.reset();
  845. s.next_write_length(10);
  846. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  847. boost::asio::transfer_exactly(1));
  848. BOOST_ASIO_CHECK(bytes_transferred == 1);
  849. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  850. s.reset();
  851. s.next_write_length(10);
  852. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  853. boost::asio::transfer_exactly(1));
  854. BOOST_ASIO_CHECK(bytes_transferred == 1);
  855. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  856. s.reset();
  857. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  858. boost::asio::transfer_exactly(10));
  859. BOOST_ASIO_CHECK(bytes_transferred == 10);
  860. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  861. s.reset();
  862. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  863. boost::asio::transfer_exactly(10));
  864. BOOST_ASIO_CHECK(bytes_transferred == 10);
  865. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  866. s.reset();
  867. s.next_write_length(1);
  868. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  869. boost::asio::transfer_exactly(10));
  870. BOOST_ASIO_CHECK(bytes_transferred == 10);
  871. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  872. s.reset();
  873. s.next_write_length(1);
  874. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  875. boost::asio::transfer_exactly(10));
  876. BOOST_ASIO_CHECK(bytes_transferred == 10);
  877. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  878. s.reset();
  879. s.next_write_length(10);
  880. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  881. boost::asio::transfer_exactly(10));
  882. BOOST_ASIO_CHECK(bytes_transferred == 10);
  883. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  884. s.reset();
  885. s.next_write_length(10);
  886. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  887. boost::asio::transfer_exactly(10));
  888. BOOST_ASIO_CHECK(bytes_transferred == 10);
  889. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  890. s.reset();
  891. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  892. boost::asio::transfer_exactly(42));
  893. BOOST_ASIO_CHECK(bytes_transferred == 42);
  894. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  895. s.reset();
  896. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  897. boost::asio::transfer_exactly(42));
  898. BOOST_ASIO_CHECK(bytes_transferred == 42);
  899. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  900. s.reset();
  901. s.next_write_length(1);
  902. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  903. boost::asio::transfer_exactly(42));
  904. BOOST_ASIO_CHECK(bytes_transferred == 42);
  905. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  906. s.reset();
  907. s.next_write_length(1);
  908. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  909. boost::asio::transfer_exactly(42));
  910. BOOST_ASIO_CHECK(bytes_transferred == 42);
  911. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  912. s.reset();
  913. s.next_write_length(10);
  914. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  915. boost::asio::transfer_exactly(42));
  916. BOOST_ASIO_CHECK(bytes_transferred == 42);
  917. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  918. s.reset();
  919. s.next_write_length(10);
  920. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  921. boost::asio::transfer_exactly(42));
  922. BOOST_ASIO_CHECK(bytes_transferred == 42);
  923. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  924. s.reset();
  925. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  926. old_style_transfer_all);
  927. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  928. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  929. s.reset();
  930. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  931. old_style_transfer_all);
  932. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  933. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  934. s.reset();
  935. s.next_write_length(1);
  936. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  937. old_style_transfer_all);
  938. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  939. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  940. s.reset();
  941. s.next_write_length(1);
  942. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  943. old_style_transfer_all);
  944. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  945. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  946. s.reset();
  947. s.next_write_length(10);
  948. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  949. old_style_transfer_all);
  950. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  951. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  952. s.reset();
  953. s.next_write_length(10);
  954. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  955. old_style_transfer_all);
  956. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  957. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  958. s.reset();
  959. bytes_transferred = boost::asio::write_at(s, 0, buffers, short_transfer());
  960. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  961. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  962. s.reset();
  963. bytes_transferred = boost::asio::write_at(s, 1234, buffers, short_transfer());
  964. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  965. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  966. s.reset();
  967. s.next_write_length(1);
  968. bytes_transferred = boost::asio::write_at(s, 0, buffers, short_transfer());
  969. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  970. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  971. s.reset();
  972. s.next_write_length(1);
  973. bytes_transferred = boost::asio::write_at(s, 1234, buffers, short_transfer());
  974. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  975. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  976. s.reset();
  977. s.next_write_length(10);
  978. bytes_transferred = boost::asio::write_at(s, 0, buffers, short_transfer());
  979. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  980. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  981. s.reset();
  982. s.next_write_length(10);
  983. bytes_transferred = boost::asio::write_at(s, 1234, buffers, short_transfer());
  984. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  985. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  986. }
  987. void test_4_arg_vector_buffers_write_at()
  988. {
  989. boost::asio::io_context ioc;
  990. test_random_access_device s(ioc);
  991. std::vector<boost::asio::const_buffer> buffers;
  992. buffers.push_back(boost::asio::buffer(write_data, 32));
  993. buffers.push_back(boost::asio::buffer(write_data) + 32);
  994. s.reset();
  995. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers,
  996. boost::asio::transfer_all());
  997. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  998. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  999. s.reset();
  1000. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1001. boost::asio::transfer_all());
  1002. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1003. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1004. s.reset();
  1005. s.next_write_length(1);
  1006. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1007. boost::asio::transfer_all());
  1008. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1009. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1010. s.reset();
  1011. s.next_write_length(1);
  1012. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1013. boost::asio::transfer_all());
  1014. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1015. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1016. s.reset();
  1017. s.next_write_length(10);
  1018. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1019. boost::asio::transfer_all());
  1020. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1021. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1022. s.reset();
  1023. s.next_write_length(10);
  1024. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1025. boost::asio::transfer_all());
  1026. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1027. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1028. s.reset();
  1029. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1030. boost::asio::transfer_at_least(1));
  1031. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1032. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1033. s.reset();
  1034. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1035. boost::asio::transfer_at_least(1));
  1036. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1037. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1038. s.reset();
  1039. s.next_write_length(1);
  1040. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1041. boost::asio::transfer_at_least(1));
  1042. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1043. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1044. s.reset();
  1045. s.next_write_length(1);
  1046. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1047. boost::asio::transfer_at_least(1));
  1048. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1049. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1050. s.reset();
  1051. s.next_write_length(10);
  1052. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1053. boost::asio::transfer_at_least(1));
  1054. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1055. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1056. s.reset();
  1057. s.next_write_length(10);
  1058. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1059. boost::asio::transfer_at_least(1));
  1060. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1061. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1062. s.reset();
  1063. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1064. boost::asio::transfer_at_least(10));
  1065. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1066. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1067. s.reset();
  1068. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1069. boost::asio::transfer_at_least(10));
  1070. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1071. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1072. s.reset();
  1073. s.next_write_length(1);
  1074. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1075. boost::asio::transfer_at_least(10));
  1076. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1077. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1078. s.reset();
  1079. s.next_write_length(1);
  1080. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1081. boost::asio::transfer_at_least(10));
  1082. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1083. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1084. s.reset();
  1085. s.next_write_length(10);
  1086. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1087. boost::asio::transfer_at_least(10));
  1088. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1089. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1090. s.reset();
  1091. s.next_write_length(10);
  1092. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1093. boost::asio::transfer_at_least(10));
  1094. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1095. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1096. s.reset();
  1097. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1098. boost::asio::transfer_at_least(42));
  1099. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1100. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1101. s.reset();
  1102. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1103. boost::asio::transfer_at_least(42));
  1104. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1105. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1106. s.reset();
  1107. s.next_write_length(1);
  1108. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1109. boost::asio::transfer_at_least(42));
  1110. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1111. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  1112. s.reset();
  1113. s.next_write_length(1);
  1114. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1115. boost::asio::transfer_at_least(42));
  1116. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1117. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  1118. s.reset();
  1119. s.next_write_length(10);
  1120. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1121. boost::asio::transfer_at_least(42));
  1122. BOOST_ASIO_CHECK(bytes_transferred == 50);
  1123. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  1124. s.reset();
  1125. s.next_write_length(10);
  1126. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1127. boost::asio::transfer_at_least(42));
  1128. BOOST_ASIO_CHECK(bytes_transferred == 50);
  1129. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  1130. s.reset();
  1131. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1132. boost::asio::transfer_exactly(1));
  1133. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1134. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1135. s.reset();
  1136. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1137. boost::asio::transfer_exactly(1));
  1138. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1139. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1140. s.reset();
  1141. s.next_write_length(1);
  1142. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1143. boost::asio::transfer_exactly(1));
  1144. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1145. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1146. s.reset();
  1147. s.next_write_length(1);
  1148. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1149. boost::asio::transfer_exactly(1));
  1150. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1151. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1152. s.reset();
  1153. s.next_write_length(10);
  1154. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1155. boost::asio::transfer_exactly(1));
  1156. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1157. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1158. s.reset();
  1159. s.next_write_length(10);
  1160. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1161. boost::asio::transfer_exactly(1));
  1162. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1163. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1164. s.reset();
  1165. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1166. boost::asio::transfer_exactly(10));
  1167. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1168. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1169. s.reset();
  1170. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1171. boost::asio::transfer_exactly(10));
  1172. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1173. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1174. s.reset();
  1175. s.next_write_length(1);
  1176. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1177. boost::asio::transfer_exactly(10));
  1178. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1179. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1180. s.reset();
  1181. s.next_write_length(1);
  1182. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1183. boost::asio::transfer_exactly(10));
  1184. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1185. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1186. s.reset();
  1187. s.next_write_length(10);
  1188. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1189. boost::asio::transfer_exactly(10));
  1190. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1191. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1192. s.reset();
  1193. s.next_write_length(10);
  1194. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1195. boost::asio::transfer_exactly(10));
  1196. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1197. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1198. s.reset();
  1199. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1200. boost::asio::transfer_exactly(42));
  1201. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1202. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  1203. s.reset();
  1204. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1205. boost::asio::transfer_exactly(42));
  1206. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1207. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  1208. s.reset();
  1209. s.next_write_length(1);
  1210. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1211. boost::asio::transfer_exactly(42));
  1212. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1213. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  1214. s.reset();
  1215. s.next_write_length(1);
  1216. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1217. boost::asio::transfer_exactly(42));
  1218. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1219. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  1220. s.reset();
  1221. s.next_write_length(10);
  1222. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1223. boost::asio::transfer_exactly(42));
  1224. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1225. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  1226. s.reset();
  1227. s.next_write_length(10);
  1228. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1229. boost::asio::transfer_exactly(42));
  1230. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1231. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  1232. s.reset();
  1233. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1234. old_style_transfer_all);
  1235. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1236. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1237. s.reset();
  1238. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1239. old_style_transfer_all);
  1240. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1241. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1242. s.reset();
  1243. s.next_write_length(1);
  1244. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1245. old_style_transfer_all);
  1246. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1247. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1248. s.reset();
  1249. s.next_write_length(1);
  1250. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1251. old_style_transfer_all);
  1252. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1253. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1254. s.reset();
  1255. s.next_write_length(10);
  1256. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1257. old_style_transfer_all);
  1258. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1259. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1260. s.reset();
  1261. s.next_write_length(10);
  1262. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1263. old_style_transfer_all);
  1264. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1265. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1266. s.reset();
  1267. bytes_transferred = boost::asio::write_at(s, 0, buffers, short_transfer());
  1268. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1269. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1270. s.reset();
  1271. bytes_transferred = boost::asio::write_at(s, 1234, buffers, short_transfer());
  1272. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1273. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1274. s.reset();
  1275. s.next_write_length(1);
  1276. bytes_transferred = boost::asio::write_at(s, 0, buffers, short_transfer());
  1277. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1278. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1279. s.reset();
  1280. s.next_write_length(1);
  1281. bytes_transferred = boost::asio::write_at(s, 1234, buffers, short_transfer());
  1282. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1283. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1284. s.reset();
  1285. s.next_write_length(10);
  1286. bytes_transferred = boost::asio::write_at(s, 0, buffers, short_transfer());
  1287. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1288. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1289. s.reset();
  1290. s.next_write_length(10);
  1291. bytes_transferred = boost::asio::write_at(s, 1234, buffers, short_transfer());
  1292. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1293. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1294. }
  1295. void test_5_arg_const_buffer_write_at()
  1296. {
  1297. boost::asio::io_context ioc;
  1298. test_random_access_device s(ioc);
  1299. boost::asio::const_buffer buffers
  1300. = boost::asio::buffer(write_data, sizeof(write_data));
  1301. s.reset();
  1302. boost::system::error_code error;
  1303. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1304. boost::asio::transfer_all(), error);
  1305. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1306. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1307. BOOST_ASIO_CHECK(!error);
  1308. s.reset();
  1309. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1310. boost::asio::transfer_all(), error);
  1311. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1312. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1313. BOOST_ASIO_CHECK(!error);
  1314. s.reset();
  1315. s.next_write_length(1);
  1316. error = boost::system::error_code();
  1317. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1318. boost::asio::transfer_all(), error);
  1319. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1320. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1321. BOOST_ASIO_CHECK(!error);
  1322. s.reset();
  1323. s.next_write_length(1);
  1324. error = boost::system::error_code();
  1325. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1326. boost::asio::transfer_all(), error);
  1327. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1328. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1329. BOOST_ASIO_CHECK(!error);
  1330. s.reset();
  1331. s.next_write_length(10);
  1332. error = boost::system::error_code();
  1333. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1334. boost::asio::transfer_all(), error);
  1335. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1336. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1337. BOOST_ASIO_CHECK(!error);
  1338. s.reset();
  1339. s.next_write_length(10);
  1340. error = boost::system::error_code();
  1341. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1342. boost::asio::transfer_all(), error);
  1343. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1344. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1345. BOOST_ASIO_CHECK(!error);
  1346. s.reset();
  1347. error = boost::system::error_code();
  1348. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1349. boost::asio::transfer_at_least(1), error);
  1350. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1351. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1352. BOOST_ASIO_CHECK(!error);
  1353. s.reset();
  1354. error = boost::system::error_code();
  1355. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1356. boost::asio::transfer_at_least(1), error);
  1357. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1358. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1359. BOOST_ASIO_CHECK(!error);
  1360. s.reset();
  1361. s.next_write_length(1);
  1362. error = boost::system::error_code();
  1363. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1364. boost::asio::transfer_at_least(1), error);
  1365. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1366. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1367. BOOST_ASIO_CHECK(!error);
  1368. s.reset();
  1369. s.next_write_length(1);
  1370. error = boost::system::error_code();
  1371. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1372. boost::asio::transfer_at_least(1), error);
  1373. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1374. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1375. BOOST_ASIO_CHECK(!error);
  1376. s.reset();
  1377. s.next_write_length(10);
  1378. error = boost::system::error_code();
  1379. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1380. boost::asio::transfer_at_least(1), error);
  1381. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1382. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1383. BOOST_ASIO_CHECK(!error);
  1384. s.reset();
  1385. s.next_write_length(10);
  1386. error = boost::system::error_code();
  1387. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1388. boost::asio::transfer_at_least(1), error);
  1389. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1390. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1391. BOOST_ASIO_CHECK(!error);
  1392. s.reset();
  1393. error = boost::system::error_code();
  1394. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1395. boost::asio::transfer_at_least(10), error);
  1396. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1397. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1398. BOOST_ASIO_CHECK(!error);
  1399. s.reset();
  1400. error = boost::system::error_code();
  1401. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1402. boost::asio::transfer_at_least(10), error);
  1403. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1404. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1405. BOOST_ASIO_CHECK(!error);
  1406. s.reset();
  1407. s.next_write_length(1);
  1408. error = boost::system::error_code();
  1409. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1410. boost::asio::transfer_at_least(10), error);
  1411. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1412. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1413. BOOST_ASIO_CHECK(!error);
  1414. s.reset();
  1415. s.next_write_length(1);
  1416. error = boost::system::error_code();
  1417. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1418. boost::asio::transfer_at_least(10), error);
  1419. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1420. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1421. BOOST_ASIO_CHECK(!error);
  1422. s.reset();
  1423. s.next_write_length(10);
  1424. error = boost::system::error_code();
  1425. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1426. boost::asio::transfer_at_least(10), error);
  1427. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1428. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1429. BOOST_ASIO_CHECK(!error);
  1430. s.reset();
  1431. s.next_write_length(10);
  1432. error = boost::system::error_code();
  1433. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1434. boost::asio::transfer_at_least(10), error);
  1435. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1436. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1437. BOOST_ASIO_CHECK(!error);
  1438. s.reset();
  1439. error = boost::system::error_code();
  1440. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1441. boost::asio::transfer_at_least(42), error);
  1442. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1443. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1444. BOOST_ASIO_CHECK(!error);
  1445. s.reset();
  1446. error = boost::system::error_code();
  1447. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1448. boost::asio::transfer_at_least(42), error);
  1449. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1450. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1451. BOOST_ASIO_CHECK(!error);
  1452. s.reset();
  1453. s.next_write_length(1);
  1454. error = boost::system::error_code();
  1455. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1456. boost::asio::transfer_at_least(42), error);
  1457. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1458. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  1459. BOOST_ASIO_CHECK(!error);
  1460. s.reset();
  1461. s.next_write_length(1);
  1462. error = boost::system::error_code();
  1463. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1464. boost::asio::transfer_at_least(42), error);
  1465. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1466. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  1467. BOOST_ASIO_CHECK(!error);
  1468. s.reset();
  1469. s.next_write_length(10);
  1470. error = boost::system::error_code();
  1471. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1472. boost::asio::transfer_at_least(42), error);
  1473. BOOST_ASIO_CHECK(bytes_transferred == 50);
  1474. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  1475. BOOST_ASIO_CHECK(!error);
  1476. s.reset();
  1477. s.next_write_length(10);
  1478. error = boost::system::error_code();
  1479. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1480. boost::asio::transfer_at_least(42), error);
  1481. BOOST_ASIO_CHECK(bytes_transferred == 50);
  1482. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  1483. BOOST_ASIO_CHECK(!error);
  1484. s.reset();
  1485. error = boost::system::error_code();
  1486. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1487. boost::asio::transfer_exactly(1), error);
  1488. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1489. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1490. BOOST_ASIO_CHECK(!error);
  1491. s.reset();
  1492. error = boost::system::error_code();
  1493. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1494. boost::asio::transfer_exactly(1), error);
  1495. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1496. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1497. BOOST_ASIO_CHECK(!error);
  1498. s.reset();
  1499. s.next_write_length(1);
  1500. error = boost::system::error_code();
  1501. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1502. boost::asio::transfer_exactly(1), error);
  1503. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1504. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1505. BOOST_ASIO_CHECK(!error);
  1506. s.reset();
  1507. s.next_write_length(1);
  1508. error = boost::system::error_code();
  1509. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1510. boost::asio::transfer_exactly(1), error);
  1511. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1512. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1513. BOOST_ASIO_CHECK(!error);
  1514. s.reset();
  1515. s.next_write_length(10);
  1516. error = boost::system::error_code();
  1517. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1518. boost::asio::transfer_exactly(1), error);
  1519. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1520. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1521. BOOST_ASIO_CHECK(!error);
  1522. s.reset();
  1523. s.next_write_length(10);
  1524. error = boost::system::error_code();
  1525. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1526. boost::asio::transfer_exactly(1), error);
  1527. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1528. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1529. BOOST_ASIO_CHECK(!error);
  1530. s.reset();
  1531. error = boost::system::error_code();
  1532. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1533. boost::asio::transfer_exactly(10), error);
  1534. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1535. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1536. BOOST_ASIO_CHECK(!error);
  1537. s.reset();
  1538. error = boost::system::error_code();
  1539. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1540. boost::asio::transfer_exactly(10), error);
  1541. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1542. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1543. BOOST_ASIO_CHECK(!error);
  1544. s.reset();
  1545. s.next_write_length(1);
  1546. error = boost::system::error_code();
  1547. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1548. boost::asio::transfer_exactly(10), error);
  1549. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1550. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1551. BOOST_ASIO_CHECK(!error);
  1552. s.reset();
  1553. s.next_write_length(1);
  1554. error = boost::system::error_code();
  1555. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1556. boost::asio::transfer_exactly(10), error);
  1557. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1558. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1559. BOOST_ASIO_CHECK(!error);
  1560. s.reset();
  1561. s.next_write_length(10);
  1562. error = boost::system::error_code();
  1563. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1564. boost::asio::transfer_exactly(10), error);
  1565. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1566. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1567. BOOST_ASIO_CHECK(!error);
  1568. s.reset();
  1569. s.next_write_length(10);
  1570. error = boost::system::error_code();
  1571. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1572. boost::asio::transfer_exactly(10), error);
  1573. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1574. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1575. BOOST_ASIO_CHECK(!error);
  1576. s.reset();
  1577. error = boost::system::error_code();
  1578. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1579. boost::asio::transfer_exactly(42), error);
  1580. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1581. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  1582. BOOST_ASIO_CHECK(!error);
  1583. s.reset();
  1584. error = boost::system::error_code();
  1585. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1586. boost::asio::transfer_exactly(42), error);
  1587. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1588. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  1589. BOOST_ASIO_CHECK(!error);
  1590. s.reset();
  1591. s.next_write_length(1);
  1592. error = boost::system::error_code();
  1593. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1594. boost::asio::transfer_exactly(42), error);
  1595. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1596. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  1597. BOOST_ASIO_CHECK(!error);
  1598. s.reset();
  1599. s.next_write_length(1);
  1600. error = boost::system::error_code();
  1601. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1602. boost::asio::transfer_exactly(42), error);
  1603. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1604. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  1605. BOOST_ASIO_CHECK(!error);
  1606. s.reset();
  1607. s.next_write_length(10);
  1608. error = boost::system::error_code();
  1609. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1610. boost::asio::transfer_exactly(42), error);
  1611. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1612. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  1613. BOOST_ASIO_CHECK(!error);
  1614. s.reset();
  1615. s.next_write_length(10);
  1616. error = boost::system::error_code();
  1617. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1618. boost::asio::transfer_exactly(42), error);
  1619. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1620. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  1621. BOOST_ASIO_CHECK(!error);
  1622. s.reset();
  1623. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1624. old_style_transfer_all, error);
  1625. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1626. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1627. BOOST_ASIO_CHECK(!error);
  1628. s.reset();
  1629. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1630. old_style_transfer_all, error);
  1631. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1632. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1633. BOOST_ASIO_CHECK(!error);
  1634. s.reset();
  1635. s.next_write_length(1);
  1636. error = boost::system::error_code();
  1637. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1638. old_style_transfer_all, error);
  1639. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1640. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1641. BOOST_ASIO_CHECK(!error);
  1642. s.reset();
  1643. s.next_write_length(1);
  1644. error = boost::system::error_code();
  1645. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1646. old_style_transfer_all, error);
  1647. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1648. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1649. BOOST_ASIO_CHECK(!error);
  1650. s.reset();
  1651. s.next_write_length(10);
  1652. error = boost::system::error_code();
  1653. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1654. old_style_transfer_all, error);
  1655. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1656. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1657. BOOST_ASIO_CHECK(!error);
  1658. s.reset();
  1659. s.next_write_length(10);
  1660. error = boost::system::error_code();
  1661. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1662. old_style_transfer_all, error);
  1663. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1664. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1665. BOOST_ASIO_CHECK(!error);
  1666. s.reset();
  1667. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1668. short_transfer(), error);
  1669. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1670. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1671. BOOST_ASIO_CHECK(!error);
  1672. s.reset();
  1673. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1674. short_transfer(), error);
  1675. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1676. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1677. BOOST_ASIO_CHECK(!error);
  1678. s.reset();
  1679. s.next_write_length(1);
  1680. error = boost::system::error_code();
  1681. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1682. short_transfer(), error);
  1683. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1684. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1685. BOOST_ASIO_CHECK(!error);
  1686. s.reset();
  1687. s.next_write_length(1);
  1688. error = boost::system::error_code();
  1689. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1690. short_transfer(), error);
  1691. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1692. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1693. BOOST_ASIO_CHECK(!error);
  1694. s.reset();
  1695. s.next_write_length(10);
  1696. error = boost::system::error_code();
  1697. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1698. short_transfer(), error);
  1699. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1700. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  1701. BOOST_ASIO_CHECK(!error);
  1702. s.reset();
  1703. s.next_write_length(10);
  1704. error = boost::system::error_code();
  1705. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1706. short_transfer(), error);
  1707. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1708. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  1709. BOOST_ASIO_CHECK(!error);
  1710. }
  1711. void test_5_arg_mutable_buffer_write_at()
  1712. {
  1713. boost::asio::io_context ioc;
  1714. test_random_access_device s(ioc);
  1715. boost::asio::mutable_buffer buffers
  1716. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  1717. s.reset();
  1718. boost::system::error_code error;
  1719. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1720. boost::asio::transfer_all(), error);
  1721. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1722. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  1723. BOOST_ASIO_CHECK(!error);
  1724. s.reset();
  1725. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1726. boost::asio::transfer_all(), error);
  1727. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1728. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  1729. BOOST_ASIO_CHECK(!error);
  1730. s.reset();
  1731. s.next_write_length(1);
  1732. error = boost::system::error_code();
  1733. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1734. boost::asio::transfer_all(), error);
  1735. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1736. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  1737. BOOST_ASIO_CHECK(!error);
  1738. s.reset();
  1739. s.next_write_length(1);
  1740. error = boost::system::error_code();
  1741. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1742. boost::asio::transfer_all(), error);
  1743. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1744. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  1745. BOOST_ASIO_CHECK(!error);
  1746. s.reset();
  1747. s.next_write_length(10);
  1748. error = boost::system::error_code();
  1749. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1750. boost::asio::transfer_all(), error);
  1751. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1752. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  1753. BOOST_ASIO_CHECK(!error);
  1754. s.reset();
  1755. s.next_write_length(10);
  1756. error = boost::system::error_code();
  1757. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1758. boost::asio::transfer_all(), error);
  1759. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1760. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  1761. BOOST_ASIO_CHECK(!error);
  1762. s.reset();
  1763. error = boost::system::error_code();
  1764. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1765. boost::asio::transfer_at_least(1), error);
  1766. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1767. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  1768. BOOST_ASIO_CHECK(!error);
  1769. s.reset();
  1770. error = boost::system::error_code();
  1771. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1772. boost::asio::transfer_at_least(1), error);
  1773. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1774. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  1775. BOOST_ASIO_CHECK(!error);
  1776. s.reset();
  1777. s.next_write_length(1);
  1778. error = boost::system::error_code();
  1779. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1780. boost::asio::transfer_at_least(1), error);
  1781. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1782. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1783. BOOST_ASIO_CHECK(!error);
  1784. s.reset();
  1785. s.next_write_length(1);
  1786. error = boost::system::error_code();
  1787. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1788. boost::asio::transfer_at_least(1), error);
  1789. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1790. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1791. BOOST_ASIO_CHECK(!error);
  1792. s.reset();
  1793. s.next_write_length(10);
  1794. error = boost::system::error_code();
  1795. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1796. boost::asio::transfer_at_least(1), error);
  1797. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1798. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1799. BOOST_ASIO_CHECK(!error);
  1800. s.reset();
  1801. s.next_write_length(10);
  1802. error = boost::system::error_code();
  1803. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1804. boost::asio::transfer_at_least(1), error);
  1805. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1806. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1807. BOOST_ASIO_CHECK(!error);
  1808. s.reset();
  1809. error = boost::system::error_code();
  1810. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1811. boost::asio::transfer_at_least(10), error);
  1812. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1813. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  1814. BOOST_ASIO_CHECK(!error);
  1815. s.reset();
  1816. error = boost::system::error_code();
  1817. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1818. boost::asio::transfer_at_least(10), error);
  1819. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1820. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  1821. BOOST_ASIO_CHECK(!error);
  1822. s.reset();
  1823. s.next_write_length(1);
  1824. error = boost::system::error_code();
  1825. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1826. boost::asio::transfer_at_least(10), error);
  1827. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1828. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1829. BOOST_ASIO_CHECK(!error);
  1830. s.reset();
  1831. s.next_write_length(1);
  1832. error = boost::system::error_code();
  1833. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1834. boost::asio::transfer_at_least(10), error);
  1835. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1836. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1837. BOOST_ASIO_CHECK(!error);
  1838. s.reset();
  1839. s.next_write_length(10);
  1840. error = boost::system::error_code();
  1841. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1842. boost::asio::transfer_at_least(10), error);
  1843. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1844. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1845. BOOST_ASIO_CHECK(!error);
  1846. s.reset();
  1847. s.next_write_length(10);
  1848. error = boost::system::error_code();
  1849. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1850. boost::asio::transfer_at_least(10), error);
  1851. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1852. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1853. BOOST_ASIO_CHECK(!error);
  1854. s.reset();
  1855. error = boost::system::error_code();
  1856. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1857. boost::asio::transfer_at_least(42), error);
  1858. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1859. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  1860. BOOST_ASIO_CHECK(!error);
  1861. s.reset();
  1862. error = boost::system::error_code();
  1863. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1864. boost::asio::transfer_at_least(42), error);
  1865. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1866. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  1867. BOOST_ASIO_CHECK(!error);
  1868. s.reset();
  1869. s.next_write_length(1);
  1870. error = boost::system::error_code();
  1871. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1872. boost::asio::transfer_at_least(42), error);
  1873. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1874. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  1875. BOOST_ASIO_CHECK(!error);
  1876. s.reset();
  1877. s.next_write_length(1);
  1878. error = boost::system::error_code();
  1879. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1880. boost::asio::transfer_at_least(42), error);
  1881. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1882. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  1883. BOOST_ASIO_CHECK(!error);
  1884. s.reset();
  1885. s.next_write_length(10);
  1886. error = boost::system::error_code();
  1887. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1888. boost::asio::transfer_at_least(42), error);
  1889. BOOST_ASIO_CHECK(bytes_transferred == 50);
  1890. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  1891. BOOST_ASIO_CHECK(!error);
  1892. s.reset();
  1893. s.next_write_length(10);
  1894. error = boost::system::error_code();
  1895. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1896. boost::asio::transfer_at_least(42), error);
  1897. BOOST_ASIO_CHECK(bytes_transferred == 50);
  1898. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  1899. BOOST_ASIO_CHECK(!error);
  1900. s.reset();
  1901. error = boost::system::error_code();
  1902. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1903. boost::asio::transfer_exactly(1), error);
  1904. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1905. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1906. BOOST_ASIO_CHECK(!error);
  1907. s.reset();
  1908. error = boost::system::error_code();
  1909. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1910. boost::asio::transfer_exactly(1), error);
  1911. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1912. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1913. BOOST_ASIO_CHECK(!error);
  1914. s.reset();
  1915. s.next_write_length(1);
  1916. error = boost::system::error_code();
  1917. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1918. boost::asio::transfer_exactly(1), error);
  1919. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1920. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1921. BOOST_ASIO_CHECK(!error);
  1922. s.reset();
  1923. s.next_write_length(1);
  1924. error = boost::system::error_code();
  1925. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1926. boost::asio::transfer_exactly(1), error);
  1927. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1928. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1929. BOOST_ASIO_CHECK(!error);
  1930. s.reset();
  1931. s.next_write_length(10);
  1932. error = boost::system::error_code();
  1933. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1934. boost::asio::transfer_exactly(1), error);
  1935. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1936. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  1937. BOOST_ASIO_CHECK(!error);
  1938. s.reset();
  1939. s.next_write_length(10);
  1940. error = boost::system::error_code();
  1941. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1942. boost::asio::transfer_exactly(1), error);
  1943. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1944. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  1945. BOOST_ASIO_CHECK(!error);
  1946. s.reset();
  1947. error = boost::system::error_code();
  1948. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1949. boost::asio::transfer_exactly(10), error);
  1950. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1951. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1952. BOOST_ASIO_CHECK(!error);
  1953. s.reset();
  1954. error = boost::system::error_code();
  1955. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1956. boost::asio::transfer_exactly(10), error);
  1957. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1958. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1959. BOOST_ASIO_CHECK(!error);
  1960. s.reset();
  1961. s.next_write_length(1);
  1962. error = boost::system::error_code();
  1963. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1964. boost::asio::transfer_exactly(10), error);
  1965. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1966. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1967. BOOST_ASIO_CHECK(!error);
  1968. s.reset();
  1969. s.next_write_length(1);
  1970. error = boost::system::error_code();
  1971. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1972. boost::asio::transfer_exactly(10), error);
  1973. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1974. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1975. BOOST_ASIO_CHECK(!error);
  1976. s.reset();
  1977. s.next_write_length(10);
  1978. error = boost::system::error_code();
  1979. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1980. boost::asio::transfer_exactly(10), error);
  1981. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1982. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  1983. BOOST_ASIO_CHECK(!error);
  1984. s.reset();
  1985. s.next_write_length(10);
  1986. error = boost::system::error_code();
  1987. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  1988. boost::asio::transfer_exactly(10), error);
  1989. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1990. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  1991. BOOST_ASIO_CHECK(!error);
  1992. s.reset();
  1993. error = boost::system::error_code();
  1994. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  1995. boost::asio::transfer_exactly(42), error);
  1996. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1997. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  1998. BOOST_ASIO_CHECK(!error);
  1999. s.reset();
  2000. error = boost::system::error_code();
  2001. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2002. boost::asio::transfer_exactly(42), error);
  2003. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2004. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  2005. BOOST_ASIO_CHECK(!error);
  2006. s.reset();
  2007. s.next_write_length(1);
  2008. error = boost::system::error_code();
  2009. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2010. boost::asio::transfer_exactly(42), error);
  2011. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2012. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  2013. BOOST_ASIO_CHECK(!error);
  2014. s.reset();
  2015. s.next_write_length(1);
  2016. error = boost::system::error_code();
  2017. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2018. boost::asio::transfer_exactly(42), error);
  2019. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2020. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  2021. BOOST_ASIO_CHECK(!error);
  2022. s.reset();
  2023. s.next_write_length(10);
  2024. error = boost::system::error_code();
  2025. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2026. boost::asio::transfer_exactly(42), error);
  2027. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2028. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  2029. BOOST_ASIO_CHECK(!error);
  2030. s.reset();
  2031. s.next_write_length(10);
  2032. error = boost::system::error_code();
  2033. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2034. boost::asio::transfer_exactly(42), error);
  2035. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2036. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  2037. BOOST_ASIO_CHECK(!error);
  2038. s.reset();
  2039. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2040. old_style_transfer_all, error);
  2041. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2042. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  2043. BOOST_ASIO_CHECK(!error);
  2044. s.reset();
  2045. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2046. old_style_transfer_all, error);
  2047. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2048. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  2049. BOOST_ASIO_CHECK(!error);
  2050. s.reset();
  2051. s.next_write_length(1);
  2052. error = boost::system::error_code();
  2053. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2054. old_style_transfer_all, error);
  2055. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2056. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  2057. BOOST_ASIO_CHECK(!error);
  2058. s.reset();
  2059. s.next_write_length(1);
  2060. error = boost::system::error_code();
  2061. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2062. old_style_transfer_all, error);
  2063. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2064. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  2065. BOOST_ASIO_CHECK(!error);
  2066. s.reset();
  2067. s.next_write_length(10);
  2068. error = boost::system::error_code();
  2069. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2070. old_style_transfer_all, error);
  2071. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2072. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  2073. BOOST_ASIO_CHECK(!error);
  2074. s.reset();
  2075. s.next_write_length(10);
  2076. error = boost::system::error_code();
  2077. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2078. old_style_transfer_all, error);
  2079. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2080. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  2081. BOOST_ASIO_CHECK(!error);
  2082. s.reset();
  2083. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2084. short_transfer(), error);
  2085. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2086. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  2087. BOOST_ASIO_CHECK(!error);
  2088. s.reset();
  2089. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2090. short_transfer(), error);
  2091. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2092. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  2093. BOOST_ASIO_CHECK(!error);
  2094. s.reset();
  2095. s.next_write_length(1);
  2096. error = boost::system::error_code();
  2097. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2098. short_transfer(), error);
  2099. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2100. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  2101. BOOST_ASIO_CHECK(!error);
  2102. s.reset();
  2103. s.next_write_length(1);
  2104. error = boost::system::error_code();
  2105. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2106. short_transfer(), error);
  2107. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2108. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  2109. BOOST_ASIO_CHECK(!error);
  2110. s.reset();
  2111. s.next_write_length(10);
  2112. error = boost::system::error_code();
  2113. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2114. short_transfer(), error);
  2115. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2116. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  2117. BOOST_ASIO_CHECK(!error);
  2118. s.reset();
  2119. s.next_write_length(10);
  2120. error = boost::system::error_code();
  2121. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2122. short_transfer(), error);
  2123. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  2124. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  2125. BOOST_ASIO_CHECK(!error);
  2126. }
  2127. void test_5_arg_vector_buffers_write_at()
  2128. {
  2129. boost::asio::io_context ioc;
  2130. test_random_access_device s(ioc);
  2131. std::vector<boost::asio::const_buffer> buffers;
  2132. buffers.push_back(boost::asio::buffer(write_data, 32));
  2133. buffers.push_back(boost::asio::buffer(write_data) + 32);
  2134. s.reset();
  2135. boost::system::error_code error;
  2136. size_t bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2137. boost::asio::transfer_all(), error);
  2138. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2139. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2140. BOOST_ASIO_CHECK(!error);
  2141. s.reset();
  2142. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2143. boost::asio::transfer_all(), error);
  2144. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2145. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2146. BOOST_ASIO_CHECK(!error);
  2147. s.reset();
  2148. s.next_write_length(1);
  2149. error = boost::system::error_code();
  2150. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2151. boost::asio::transfer_all(), error);
  2152. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2153. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2154. BOOST_ASIO_CHECK(!error);
  2155. s.reset();
  2156. s.next_write_length(1);
  2157. error = boost::system::error_code();
  2158. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2159. boost::asio::transfer_all(), error);
  2160. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2161. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2162. BOOST_ASIO_CHECK(!error);
  2163. s.reset();
  2164. s.next_write_length(10);
  2165. error = boost::system::error_code();
  2166. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2167. boost::asio::transfer_all(), error);
  2168. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2169. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2170. BOOST_ASIO_CHECK(!error);
  2171. s.reset();
  2172. s.next_write_length(10);
  2173. error = boost::system::error_code();
  2174. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2175. boost::asio::transfer_all(), error);
  2176. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2177. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2178. BOOST_ASIO_CHECK(!error);
  2179. s.reset();
  2180. error = boost::system::error_code();
  2181. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2182. boost::asio::transfer_at_least(1), error);
  2183. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2184. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2185. BOOST_ASIO_CHECK(!error);
  2186. s.reset();
  2187. error = boost::system::error_code();
  2188. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2189. boost::asio::transfer_at_least(1), error);
  2190. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2191. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2192. BOOST_ASIO_CHECK(!error);
  2193. s.reset();
  2194. s.next_write_length(1);
  2195. error = boost::system::error_code();
  2196. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2197. boost::asio::transfer_at_least(1), error);
  2198. BOOST_ASIO_CHECK(bytes_transferred == 1);
  2199. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  2200. BOOST_ASIO_CHECK(!error);
  2201. s.reset();
  2202. s.next_write_length(1);
  2203. error = boost::system::error_code();
  2204. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2205. boost::asio::transfer_at_least(1), error);
  2206. BOOST_ASIO_CHECK(bytes_transferred == 1);
  2207. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  2208. BOOST_ASIO_CHECK(!error);
  2209. s.reset();
  2210. s.next_write_length(10);
  2211. error = boost::system::error_code();
  2212. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2213. boost::asio::transfer_at_least(1), error);
  2214. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2215. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  2216. BOOST_ASIO_CHECK(!error);
  2217. s.reset();
  2218. s.next_write_length(10);
  2219. error = boost::system::error_code();
  2220. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2221. boost::asio::transfer_at_least(1), error);
  2222. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2223. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  2224. BOOST_ASIO_CHECK(!error);
  2225. s.reset();
  2226. error = boost::system::error_code();
  2227. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2228. boost::asio::transfer_at_least(10), error);
  2229. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2230. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2231. BOOST_ASIO_CHECK(!error);
  2232. s.reset();
  2233. error = boost::system::error_code();
  2234. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2235. boost::asio::transfer_at_least(10), error);
  2236. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2237. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2238. BOOST_ASIO_CHECK(!error);
  2239. s.reset();
  2240. s.next_write_length(1);
  2241. error = boost::system::error_code();
  2242. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2243. boost::asio::transfer_at_least(10), error);
  2244. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2245. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  2246. BOOST_ASIO_CHECK(!error);
  2247. s.reset();
  2248. s.next_write_length(1);
  2249. error = boost::system::error_code();
  2250. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2251. boost::asio::transfer_at_least(10), error);
  2252. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2253. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  2254. BOOST_ASIO_CHECK(!error);
  2255. s.reset();
  2256. s.next_write_length(10);
  2257. error = boost::system::error_code();
  2258. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2259. boost::asio::transfer_at_least(10), error);
  2260. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2261. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  2262. BOOST_ASIO_CHECK(!error);
  2263. s.reset();
  2264. s.next_write_length(10);
  2265. error = boost::system::error_code();
  2266. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2267. boost::asio::transfer_at_least(10), error);
  2268. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2269. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  2270. BOOST_ASIO_CHECK(!error);
  2271. s.reset();
  2272. error = boost::system::error_code();
  2273. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2274. boost::asio::transfer_at_least(42), error);
  2275. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2276. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2277. BOOST_ASIO_CHECK(!error);
  2278. s.reset();
  2279. error = boost::system::error_code();
  2280. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2281. boost::asio::transfer_at_least(42), error);
  2282. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2283. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2284. BOOST_ASIO_CHECK(!error);
  2285. s.reset();
  2286. s.next_write_length(1);
  2287. error = boost::system::error_code();
  2288. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2289. boost::asio::transfer_at_least(42), error);
  2290. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2291. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  2292. BOOST_ASIO_CHECK(!error);
  2293. s.reset();
  2294. s.next_write_length(1);
  2295. error = boost::system::error_code();
  2296. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2297. boost::asio::transfer_at_least(42), error);
  2298. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2299. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  2300. BOOST_ASIO_CHECK(!error);
  2301. s.reset();
  2302. s.next_write_length(10);
  2303. error = boost::system::error_code();
  2304. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2305. boost::asio::transfer_at_least(42), error);
  2306. BOOST_ASIO_CHECK(bytes_transferred == 50);
  2307. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  2308. BOOST_ASIO_CHECK(!error);
  2309. s.reset();
  2310. s.next_write_length(10);
  2311. error = boost::system::error_code();
  2312. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2313. boost::asio::transfer_at_least(42), error);
  2314. BOOST_ASIO_CHECK(bytes_transferred == 50);
  2315. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  2316. BOOST_ASIO_CHECK(!error);
  2317. s.reset();
  2318. error = boost::system::error_code();
  2319. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2320. boost::asio::transfer_exactly(1), error);
  2321. BOOST_ASIO_CHECK(bytes_transferred == 1);
  2322. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  2323. BOOST_ASIO_CHECK(!error);
  2324. s.reset();
  2325. error = boost::system::error_code();
  2326. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2327. boost::asio::transfer_exactly(1), error);
  2328. BOOST_ASIO_CHECK(bytes_transferred == 1);
  2329. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  2330. BOOST_ASIO_CHECK(!error);
  2331. s.reset();
  2332. s.next_write_length(1);
  2333. error = boost::system::error_code();
  2334. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2335. boost::asio::transfer_exactly(1), error);
  2336. BOOST_ASIO_CHECK(bytes_transferred == 1);
  2337. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  2338. BOOST_ASIO_CHECK(!error);
  2339. s.reset();
  2340. s.next_write_length(1);
  2341. error = boost::system::error_code();
  2342. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2343. boost::asio::transfer_exactly(1), error);
  2344. BOOST_ASIO_CHECK(bytes_transferred == 1);
  2345. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  2346. BOOST_ASIO_CHECK(!error);
  2347. s.reset();
  2348. s.next_write_length(10);
  2349. error = boost::system::error_code();
  2350. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2351. boost::asio::transfer_exactly(1), error);
  2352. BOOST_ASIO_CHECK(bytes_transferred == 1);
  2353. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  2354. BOOST_ASIO_CHECK(!error);
  2355. s.reset();
  2356. s.next_write_length(10);
  2357. error = boost::system::error_code();
  2358. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2359. boost::asio::transfer_exactly(1), error);
  2360. BOOST_ASIO_CHECK(bytes_transferred == 1);
  2361. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  2362. BOOST_ASIO_CHECK(!error);
  2363. s.reset();
  2364. error = boost::system::error_code();
  2365. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2366. boost::asio::transfer_exactly(10), error);
  2367. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2368. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  2369. BOOST_ASIO_CHECK(!error);
  2370. s.reset();
  2371. error = boost::system::error_code();
  2372. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2373. boost::asio::transfer_exactly(10), error);
  2374. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2375. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  2376. BOOST_ASIO_CHECK(!error);
  2377. s.reset();
  2378. s.next_write_length(1);
  2379. error = boost::system::error_code();
  2380. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2381. boost::asio::transfer_exactly(10), error);
  2382. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2383. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  2384. BOOST_ASIO_CHECK(!error);
  2385. s.reset();
  2386. s.next_write_length(1);
  2387. error = boost::system::error_code();
  2388. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2389. boost::asio::transfer_exactly(10), error);
  2390. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2391. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  2392. BOOST_ASIO_CHECK(!error);
  2393. s.reset();
  2394. s.next_write_length(10);
  2395. error = boost::system::error_code();
  2396. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2397. boost::asio::transfer_exactly(10), error);
  2398. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2399. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  2400. BOOST_ASIO_CHECK(!error);
  2401. s.reset();
  2402. s.next_write_length(10);
  2403. error = boost::system::error_code();
  2404. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2405. boost::asio::transfer_exactly(10), error);
  2406. BOOST_ASIO_CHECK(bytes_transferred == 10);
  2407. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  2408. BOOST_ASIO_CHECK(!error);
  2409. s.reset();
  2410. error = boost::system::error_code();
  2411. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2412. boost::asio::transfer_exactly(42), error);
  2413. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2414. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  2415. BOOST_ASIO_CHECK(!error);
  2416. s.reset();
  2417. error = boost::system::error_code();
  2418. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2419. boost::asio::transfer_exactly(42), error);
  2420. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2421. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  2422. BOOST_ASIO_CHECK(!error);
  2423. s.reset();
  2424. s.next_write_length(1);
  2425. error = boost::system::error_code();
  2426. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2427. boost::asio::transfer_exactly(42), error);
  2428. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2429. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  2430. BOOST_ASIO_CHECK(!error);
  2431. s.reset();
  2432. s.next_write_length(1);
  2433. error = boost::system::error_code();
  2434. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2435. boost::asio::transfer_exactly(42), error);
  2436. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2437. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  2438. BOOST_ASIO_CHECK(!error);
  2439. s.reset();
  2440. s.next_write_length(10);
  2441. error = boost::system::error_code();
  2442. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2443. boost::asio::transfer_exactly(42), error);
  2444. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2445. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  2446. BOOST_ASIO_CHECK(!error);
  2447. s.reset();
  2448. s.next_write_length(10);
  2449. error = boost::system::error_code();
  2450. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2451. boost::asio::transfer_exactly(42), error);
  2452. BOOST_ASIO_CHECK(bytes_transferred == 42);
  2453. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  2454. BOOST_ASIO_CHECK(!error);
  2455. s.reset();
  2456. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2457. old_style_transfer_all, error);
  2458. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2459. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2460. BOOST_ASIO_CHECK(!error);
  2461. s.reset();
  2462. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2463. old_style_transfer_all, error);
  2464. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2465. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2466. BOOST_ASIO_CHECK(!error);
  2467. s.reset();
  2468. s.next_write_length(1);
  2469. error = boost::system::error_code();
  2470. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2471. old_style_transfer_all, error);
  2472. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2473. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2474. BOOST_ASIO_CHECK(!error);
  2475. s.reset();
  2476. s.next_write_length(1);
  2477. error = boost::system::error_code();
  2478. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2479. old_style_transfer_all, error);
  2480. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2481. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2482. BOOST_ASIO_CHECK(!error);
  2483. s.reset();
  2484. s.next_write_length(10);
  2485. error = boost::system::error_code();
  2486. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2487. old_style_transfer_all, error);
  2488. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2489. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2490. BOOST_ASIO_CHECK(!error);
  2491. s.reset();
  2492. s.next_write_length(10);
  2493. error = boost::system::error_code();
  2494. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2495. old_style_transfer_all, error);
  2496. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2497. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2498. BOOST_ASIO_CHECK(!error);
  2499. s.reset();
  2500. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2501. short_transfer(), error);
  2502. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2503. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2504. BOOST_ASIO_CHECK(!error);
  2505. s.reset();
  2506. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2507. short_transfer(), error);
  2508. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2509. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2510. BOOST_ASIO_CHECK(!error);
  2511. s.reset();
  2512. s.next_write_length(1);
  2513. error = boost::system::error_code();
  2514. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2515. short_transfer(), error);
  2516. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2517. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2518. BOOST_ASIO_CHECK(!error);
  2519. s.reset();
  2520. s.next_write_length(1);
  2521. error = boost::system::error_code();
  2522. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2523. short_transfer(), error);
  2524. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2525. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2526. BOOST_ASIO_CHECK(!error);
  2527. s.reset();
  2528. s.next_write_length(10);
  2529. error = boost::system::error_code();
  2530. bytes_transferred = boost::asio::write_at(s, 0, buffers,
  2531. short_transfer(), error);
  2532. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2533. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2534. BOOST_ASIO_CHECK(!error);
  2535. s.reset();
  2536. s.next_write_length(10);
  2537. error = boost::system::error_code();
  2538. bytes_transferred = boost::asio::write_at(s, 1234, buffers,
  2539. short_transfer(), error);
  2540. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  2541. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2542. BOOST_ASIO_CHECK(!error);
  2543. }
  2544. void async_write_handler(const boost::system::error_code& e,
  2545. size_t bytes_transferred, size_t expected_bytes_transferred, bool* called)
  2546. {
  2547. *called = true;
  2548. BOOST_ASIO_CHECK(!e);
  2549. BOOST_ASIO_CHECK(bytes_transferred == expected_bytes_transferred);
  2550. }
  2551. void test_4_arg_const_buffer_async_write_at()
  2552. {
  2553. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  2554. namespace bindns = boost;
  2555. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2556. namespace bindns = std;
  2557. using std::placeholders::_1;
  2558. using std::placeholders::_2;
  2559. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2560. boost::asio::io_context ioc;
  2561. test_random_access_device s(ioc);
  2562. boost::asio::const_buffer buffers
  2563. = boost::asio::buffer(write_data, sizeof(write_data));
  2564. s.reset();
  2565. bool called = false;
  2566. boost::asio::async_write_at(s, 0, buffers,
  2567. bindns::bind(async_write_handler,
  2568. _1, _2, sizeof(write_data), &called));
  2569. ioc.restart();
  2570. ioc.run();
  2571. BOOST_ASIO_CHECK(called);
  2572. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2573. s.reset();
  2574. called = false;
  2575. boost::asio::async_write_at(s, 1234, buffers,
  2576. bindns::bind(async_write_handler,
  2577. _1, _2, sizeof(write_data), &called));
  2578. ioc.restart();
  2579. ioc.run();
  2580. BOOST_ASIO_CHECK(called);
  2581. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2582. s.reset();
  2583. s.next_write_length(1);
  2584. called = false;
  2585. boost::asio::async_write_at(s, 0, buffers,
  2586. bindns::bind(async_write_handler,
  2587. _1, _2, sizeof(write_data), &called));
  2588. ioc.restart();
  2589. ioc.run();
  2590. BOOST_ASIO_CHECK(called);
  2591. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2592. s.reset();
  2593. s.next_write_length(1);
  2594. called = false;
  2595. boost::asio::async_write_at(s, 1234, buffers,
  2596. bindns::bind(async_write_handler,
  2597. _1, _2, sizeof(write_data), &called));
  2598. ioc.restart();
  2599. ioc.run();
  2600. BOOST_ASIO_CHECK(called);
  2601. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2602. s.reset();
  2603. s.next_write_length(10);
  2604. called = false;
  2605. boost::asio::async_write_at(s, 0, buffers,
  2606. bindns::bind(async_write_handler,
  2607. _1, _2, sizeof(write_data), &called));
  2608. ioc.restart();
  2609. ioc.run();
  2610. BOOST_ASIO_CHECK(called);
  2611. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2612. s.reset();
  2613. s.next_write_length(10);
  2614. called = false;
  2615. boost::asio::async_write_at(s, 1234, buffers,
  2616. bindns::bind(async_write_handler,
  2617. _1, _2, sizeof(write_data), &called));
  2618. ioc.restart();
  2619. ioc.run();
  2620. BOOST_ASIO_CHECK(called);
  2621. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2622. s.reset();
  2623. s.next_write_length(10);
  2624. called = false;
  2625. boost::asio::async_write_at(s, 0, buffers,
  2626. bindns::bind(async_write_handler,
  2627. _1, _2, sizeof(write_data), &called));
  2628. ioc.restart();
  2629. ioc.run();
  2630. BOOST_ASIO_CHECK(called);
  2631. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2632. s.reset();
  2633. int i = boost::asio::async_write_at(s, 0, buffers,
  2634. archetypes::lazy_handler());
  2635. BOOST_ASIO_CHECK(i == 42);
  2636. ioc.restart();
  2637. ioc.run();
  2638. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2639. }
  2640. void test_4_arg_mutable_buffer_async_write_at()
  2641. {
  2642. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  2643. namespace bindns = boost;
  2644. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2645. namespace bindns = std;
  2646. using std::placeholders::_1;
  2647. using std::placeholders::_2;
  2648. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2649. boost::asio::io_context ioc;
  2650. test_random_access_device s(ioc);
  2651. boost::asio::mutable_buffer buffers
  2652. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  2653. s.reset();
  2654. bool called = false;
  2655. boost::asio::async_write_at(s, 0, buffers,
  2656. bindns::bind(async_write_handler,
  2657. _1, _2, sizeof(mutable_write_data), &called));
  2658. ioc.restart();
  2659. ioc.run();
  2660. BOOST_ASIO_CHECK(called);
  2661. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  2662. s.reset();
  2663. called = false;
  2664. boost::asio::async_write_at(s, 1234, buffers,
  2665. bindns::bind(async_write_handler,
  2666. _1, _2, sizeof(mutable_write_data), &called));
  2667. ioc.restart();
  2668. ioc.run();
  2669. BOOST_ASIO_CHECK(called);
  2670. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  2671. s.reset();
  2672. s.next_write_length(1);
  2673. called = false;
  2674. boost::asio::async_write_at(s, 0, buffers,
  2675. bindns::bind(async_write_handler,
  2676. _1, _2, sizeof(mutable_write_data), &called));
  2677. ioc.restart();
  2678. ioc.run();
  2679. BOOST_ASIO_CHECK(called);
  2680. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  2681. s.reset();
  2682. s.next_write_length(1);
  2683. called = false;
  2684. boost::asio::async_write_at(s, 1234, buffers,
  2685. bindns::bind(async_write_handler,
  2686. _1, _2, sizeof(mutable_write_data), &called));
  2687. ioc.restart();
  2688. ioc.run();
  2689. BOOST_ASIO_CHECK(called);
  2690. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  2691. s.reset();
  2692. s.next_write_length(10);
  2693. called = false;
  2694. boost::asio::async_write_at(s, 0, buffers,
  2695. bindns::bind(async_write_handler,
  2696. _1, _2, sizeof(mutable_write_data), &called));
  2697. ioc.restart();
  2698. ioc.run();
  2699. BOOST_ASIO_CHECK(called);
  2700. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  2701. s.reset();
  2702. s.next_write_length(10);
  2703. called = false;
  2704. boost::asio::async_write_at(s, 1234, buffers,
  2705. bindns::bind(async_write_handler,
  2706. _1, _2, sizeof(mutable_write_data), &called));
  2707. ioc.restart();
  2708. ioc.run();
  2709. BOOST_ASIO_CHECK(called);
  2710. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  2711. s.reset();
  2712. s.next_write_length(10);
  2713. called = false;
  2714. boost::asio::async_write_at(s, 0, buffers,
  2715. bindns::bind(async_write_handler,
  2716. _1, _2, sizeof(mutable_write_data), &called));
  2717. ioc.restart();
  2718. ioc.run();
  2719. BOOST_ASIO_CHECK(called);
  2720. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  2721. s.reset();
  2722. int i = boost::asio::async_write_at(s, 0, buffers,
  2723. archetypes::lazy_handler());
  2724. BOOST_ASIO_CHECK(i == 42);
  2725. ioc.restart();
  2726. ioc.run();
  2727. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2728. }
  2729. void test_4_arg_boost_array_buffers_async_write_at()
  2730. {
  2731. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  2732. namespace bindns = boost;
  2733. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2734. namespace bindns = std;
  2735. using std::placeholders::_1;
  2736. using std::placeholders::_2;
  2737. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2738. #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  2739. boost::asio::io_context ioc;
  2740. test_random_access_device s(ioc);
  2741. boost::array<boost::asio::const_buffer, 2> buffers = { {
  2742. boost::asio::buffer(write_data, 32),
  2743. boost::asio::buffer(write_data) + 32 } };
  2744. s.reset();
  2745. bool called = false;
  2746. boost::asio::async_write_at(s, 0, buffers,
  2747. bindns::bind(async_write_handler,
  2748. _1, _2, sizeof(write_data), &called));
  2749. ioc.restart();
  2750. ioc.run();
  2751. BOOST_ASIO_CHECK(called);
  2752. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2753. s.reset();
  2754. called = false;
  2755. boost::asio::async_write_at(s, 1234, buffers,
  2756. bindns::bind(async_write_handler,
  2757. _1, _2, sizeof(write_data), &called));
  2758. ioc.restart();
  2759. ioc.run();
  2760. BOOST_ASIO_CHECK(called);
  2761. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2762. s.reset();
  2763. s.next_write_length(1);
  2764. called = false;
  2765. boost::asio::async_write_at(s, 0, buffers,
  2766. bindns::bind(async_write_handler,
  2767. _1, _2, sizeof(write_data), &called));
  2768. ioc.restart();
  2769. ioc.run();
  2770. BOOST_ASIO_CHECK(called);
  2771. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2772. s.reset();
  2773. s.next_write_length(1);
  2774. called = false;
  2775. boost::asio::async_write_at(s, 1234, buffers,
  2776. bindns::bind(async_write_handler,
  2777. _1, _2, sizeof(write_data), &called));
  2778. ioc.restart();
  2779. ioc.run();
  2780. BOOST_ASIO_CHECK(called);
  2781. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2782. s.reset();
  2783. s.next_write_length(10);
  2784. called = false;
  2785. boost::asio::async_write_at(s, 0, buffers,
  2786. bindns::bind(async_write_handler,
  2787. _1, _2, sizeof(write_data), &called));
  2788. ioc.restart();
  2789. ioc.run();
  2790. BOOST_ASIO_CHECK(called);
  2791. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2792. s.reset();
  2793. s.next_write_length(10);
  2794. called = false;
  2795. boost::asio::async_write_at(s, 1234, buffers,
  2796. bindns::bind(async_write_handler,
  2797. _1, _2, sizeof(write_data), &called));
  2798. ioc.restart();
  2799. ioc.run();
  2800. BOOST_ASIO_CHECK(called);
  2801. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2802. s.reset();
  2803. s.next_write_length(10);
  2804. called = false;
  2805. boost::asio::async_write_at(s, 0, buffers,
  2806. bindns::bind(async_write_handler,
  2807. _1, _2, sizeof(write_data), &called));
  2808. ioc.restart();
  2809. ioc.run();
  2810. BOOST_ASIO_CHECK(called);
  2811. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2812. s.reset();
  2813. int i = boost::asio::async_write_at(s, 0, buffers,
  2814. archetypes::lazy_handler());
  2815. BOOST_ASIO_CHECK(i == 42);
  2816. ioc.restart();
  2817. ioc.run();
  2818. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2819. #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  2820. }
  2821. void test_4_arg_std_array_buffers_async_write_at()
  2822. {
  2823. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  2824. namespace bindns = boost;
  2825. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2826. namespace bindns = std;
  2827. using std::placeholders::_1;
  2828. using std::placeholders::_2;
  2829. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2830. #if defined(BOOST_ASIO_HAS_STD_ARRAY)
  2831. boost::asio::io_context ioc;
  2832. test_random_access_device s(ioc);
  2833. std::array<boost::asio::const_buffer, 2> buffers = { {
  2834. boost::asio::buffer(write_data, 32),
  2835. boost::asio::buffer(write_data) + 32 } };
  2836. s.reset();
  2837. bool called = false;
  2838. boost::asio::async_write_at(s, 0, buffers,
  2839. bindns::bind(async_write_handler,
  2840. _1, _2, sizeof(write_data), &called));
  2841. ioc.restart();
  2842. ioc.run();
  2843. BOOST_ASIO_CHECK(called);
  2844. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2845. s.reset();
  2846. called = false;
  2847. boost::asio::async_write_at(s, 1234, buffers,
  2848. bindns::bind(async_write_handler,
  2849. _1, _2, sizeof(write_data), &called));
  2850. ioc.restart();
  2851. ioc.run();
  2852. BOOST_ASIO_CHECK(called);
  2853. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2854. s.reset();
  2855. s.next_write_length(1);
  2856. called = false;
  2857. boost::asio::async_write_at(s, 0, buffers,
  2858. bindns::bind(async_write_handler,
  2859. _1, _2, sizeof(write_data), &called));
  2860. ioc.restart();
  2861. ioc.run();
  2862. BOOST_ASIO_CHECK(called);
  2863. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2864. s.reset();
  2865. s.next_write_length(1);
  2866. called = false;
  2867. boost::asio::async_write_at(s, 1234, buffers,
  2868. bindns::bind(async_write_handler,
  2869. _1, _2, sizeof(write_data), &called));
  2870. ioc.restart();
  2871. ioc.run();
  2872. BOOST_ASIO_CHECK(called);
  2873. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2874. s.reset();
  2875. s.next_write_length(10);
  2876. called = false;
  2877. boost::asio::async_write_at(s, 0, buffers,
  2878. bindns::bind(async_write_handler,
  2879. _1, _2, sizeof(write_data), &called));
  2880. ioc.restart();
  2881. ioc.run();
  2882. BOOST_ASIO_CHECK(called);
  2883. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2884. s.reset();
  2885. s.next_write_length(10);
  2886. called = false;
  2887. boost::asio::async_write_at(s, 1234, buffers,
  2888. bindns::bind(async_write_handler,
  2889. _1, _2, sizeof(write_data), &called));
  2890. ioc.restart();
  2891. ioc.run();
  2892. BOOST_ASIO_CHECK(called);
  2893. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2894. s.reset();
  2895. s.next_write_length(10);
  2896. called = false;
  2897. boost::asio::async_write_at(s, 0, buffers,
  2898. bindns::bind(async_write_handler,
  2899. _1, _2, sizeof(write_data), &called));
  2900. ioc.restart();
  2901. ioc.run();
  2902. BOOST_ASIO_CHECK(called);
  2903. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2904. s.reset();
  2905. int i = boost::asio::async_write_at(s, 0, buffers,
  2906. archetypes::lazy_handler());
  2907. BOOST_ASIO_CHECK(i == 42);
  2908. ioc.restart();
  2909. ioc.run();
  2910. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2911. #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
  2912. }
  2913. void test_4_arg_vector_buffers_async_write_at()
  2914. {
  2915. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  2916. namespace bindns = boost;
  2917. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2918. namespace bindns = std;
  2919. using std::placeholders::_1;
  2920. using std::placeholders::_2;
  2921. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2922. boost::asio::io_context ioc;
  2923. test_random_access_device s(ioc);
  2924. std::vector<boost::asio::const_buffer> buffers;
  2925. buffers.push_back(boost::asio::buffer(write_data, 32));
  2926. buffers.push_back(boost::asio::buffer(write_data) + 32);
  2927. s.reset();
  2928. bool called = false;
  2929. boost::asio::async_write_at(s, 0, buffers,
  2930. bindns::bind(async_write_handler,
  2931. _1, _2, sizeof(write_data), &called));
  2932. ioc.restart();
  2933. ioc.run();
  2934. BOOST_ASIO_CHECK(called);
  2935. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2936. s.reset();
  2937. called = false;
  2938. boost::asio::async_write_at(s, 1234, buffers,
  2939. bindns::bind(async_write_handler,
  2940. _1, _2, sizeof(write_data), &called));
  2941. ioc.restart();
  2942. ioc.run();
  2943. BOOST_ASIO_CHECK(called);
  2944. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2945. s.reset();
  2946. s.next_write_length(1);
  2947. called = false;
  2948. boost::asio::async_write_at(s, 0, buffers,
  2949. bindns::bind(async_write_handler,
  2950. _1, _2, sizeof(write_data), &called));
  2951. ioc.restart();
  2952. ioc.run();
  2953. BOOST_ASIO_CHECK(called);
  2954. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2955. s.reset();
  2956. s.next_write_length(1);
  2957. called = false;
  2958. boost::asio::async_write_at(s, 1234, buffers,
  2959. bindns::bind(async_write_handler,
  2960. _1, _2, sizeof(write_data), &called));
  2961. ioc.restart();
  2962. ioc.run();
  2963. BOOST_ASIO_CHECK(called);
  2964. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2965. s.reset();
  2966. s.next_write_length(10);
  2967. called = false;
  2968. boost::asio::async_write_at(s, 0, buffers,
  2969. bindns::bind(async_write_handler,
  2970. _1, _2, sizeof(write_data), &called));
  2971. ioc.restart();
  2972. ioc.run();
  2973. BOOST_ASIO_CHECK(called);
  2974. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2975. s.reset();
  2976. s.next_write_length(10);
  2977. called = false;
  2978. boost::asio::async_write_at(s, 1234, buffers,
  2979. bindns::bind(async_write_handler,
  2980. _1, _2, sizeof(write_data), &called));
  2981. ioc.restart();
  2982. ioc.run();
  2983. BOOST_ASIO_CHECK(called);
  2984. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  2985. s.reset();
  2986. s.next_write_length(10);
  2987. called = false;
  2988. boost::asio::async_write_at(s, 0, buffers,
  2989. bindns::bind(async_write_handler,
  2990. _1, _2, sizeof(write_data), &called));
  2991. ioc.restart();
  2992. ioc.run();
  2993. BOOST_ASIO_CHECK(called);
  2994. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  2995. s.reset();
  2996. int i = boost::asio::async_write_at(s, 0, buffers,
  2997. archetypes::lazy_handler());
  2998. BOOST_ASIO_CHECK(i == 42);
  2999. ioc.restart();
  3000. ioc.run();
  3001. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3002. }
  3003. void test_4_arg_streambuf_async_write_at()
  3004. {
  3005. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  3006. namespace bindns = boost;
  3007. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  3008. namespace bindns = std;
  3009. using std::placeholders::_1;
  3010. using std::placeholders::_2;
  3011. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  3012. boost::asio::io_context ioc;
  3013. test_random_access_device s(ioc);
  3014. boost::asio::streambuf sb;
  3015. boost::asio::const_buffer buffers
  3016. = boost::asio::buffer(write_data, sizeof(write_data));
  3017. s.reset();
  3018. sb.consume(sb.size());
  3019. sb.sputn(write_data, sizeof(write_data));
  3020. bool called = false;
  3021. boost::asio::async_write_at(s, 0, sb,
  3022. bindns::bind(async_write_handler,
  3023. _1, _2, sizeof(write_data), &called));
  3024. ioc.restart();
  3025. ioc.run();
  3026. BOOST_ASIO_CHECK(called);
  3027. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3028. s.reset();
  3029. sb.consume(sb.size());
  3030. sb.sputn(write_data, sizeof(write_data));
  3031. called = false;
  3032. boost::asio::async_write_at(s, 1234, sb,
  3033. bindns::bind(async_write_handler,
  3034. _1, _2, sizeof(write_data), &called));
  3035. ioc.restart();
  3036. ioc.run();
  3037. BOOST_ASIO_CHECK(called);
  3038. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3039. s.reset();
  3040. sb.consume(sb.size());
  3041. sb.sputn(write_data, sizeof(write_data));
  3042. s.next_write_length(1);
  3043. called = false;
  3044. boost::asio::async_write_at(s, 0, sb,
  3045. bindns::bind(async_write_handler,
  3046. _1, _2, sizeof(write_data), &called));
  3047. ioc.restart();
  3048. ioc.run();
  3049. BOOST_ASIO_CHECK(called);
  3050. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3051. s.reset();
  3052. sb.consume(sb.size());
  3053. sb.sputn(write_data, sizeof(write_data));
  3054. s.next_write_length(1);
  3055. called = false;
  3056. boost::asio::async_write_at(s, 1234, sb,
  3057. bindns::bind(async_write_handler,
  3058. _1, _2, sizeof(write_data), &called));
  3059. ioc.restart();
  3060. ioc.run();
  3061. BOOST_ASIO_CHECK(called);
  3062. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3063. s.reset();
  3064. sb.consume(sb.size());
  3065. sb.sputn(write_data, sizeof(write_data));
  3066. s.next_write_length(10);
  3067. called = false;
  3068. boost::asio::async_write_at(s, 0, sb,
  3069. bindns::bind(async_write_handler,
  3070. _1, _2, sizeof(write_data), &called));
  3071. ioc.restart();
  3072. ioc.run();
  3073. BOOST_ASIO_CHECK(called);
  3074. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3075. s.reset();
  3076. sb.consume(sb.size());
  3077. sb.sputn(write_data, sizeof(write_data));
  3078. s.next_write_length(10);
  3079. called = false;
  3080. boost::asio::async_write_at(s, 1234, sb,
  3081. bindns::bind(async_write_handler,
  3082. _1, _2, sizeof(write_data), &called));
  3083. ioc.restart();
  3084. ioc.run();
  3085. BOOST_ASIO_CHECK(called);
  3086. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3087. s.reset();
  3088. sb.consume(sb.size());
  3089. sb.sputn(write_data, sizeof(write_data));
  3090. s.next_write_length(10);
  3091. called = false;
  3092. boost::asio::async_write_at(s, 0, sb,
  3093. bindns::bind(async_write_handler,
  3094. _1, _2, sizeof(write_data), &called));
  3095. ioc.restart();
  3096. ioc.run();
  3097. BOOST_ASIO_CHECK(called);
  3098. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3099. s.reset();
  3100. sb.consume(sb.size());
  3101. sb.sputn(write_data, sizeof(write_data));
  3102. int i = boost::asio::async_write_at(s, 0, sb,
  3103. archetypes::lazy_handler());
  3104. BOOST_ASIO_CHECK(i == 42);
  3105. ioc.restart();
  3106. ioc.run();
  3107. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3108. }
  3109. void test_5_arg_const_buffer_async_write_at()
  3110. {
  3111. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  3112. namespace bindns = boost;
  3113. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  3114. namespace bindns = std;
  3115. using std::placeholders::_1;
  3116. using std::placeholders::_2;
  3117. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  3118. boost::asio::io_context ioc;
  3119. test_random_access_device s(ioc);
  3120. boost::asio::const_buffer buffers
  3121. = boost::asio::buffer(write_data, sizeof(write_data));
  3122. s.reset();
  3123. bool called = false;
  3124. boost::asio::async_write_at(s, 0, buffers,
  3125. boost::asio::transfer_all(),
  3126. bindns::bind(async_write_handler,
  3127. _1, _2, sizeof(write_data), &called));
  3128. ioc.restart();
  3129. ioc.run();
  3130. BOOST_ASIO_CHECK(called);
  3131. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3132. s.reset();
  3133. called = false;
  3134. boost::asio::async_write_at(s, 1234, buffers,
  3135. boost::asio::transfer_all(),
  3136. bindns::bind(async_write_handler,
  3137. _1, _2, sizeof(write_data), &called));
  3138. ioc.restart();
  3139. ioc.run();
  3140. BOOST_ASIO_CHECK(called);
  3141. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3142. s.reset();
  3143. s.next_write_length(1);
  3144. called = false;
  3145. boost::asio::async_write_at(s, 0, buffers,
  3146. boost::asio::transfer_all(),
  3147. bindns::bind(async_write_handler,
  3148. _1, _2, sizeof(write_data), &called));
  3149. ioc.restart();
  3150. ioc.run();
  3151. BOOST_ASIO_CHECK(called);
  3152. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3153. s.reset();
  3154. s.next_write_length(1);
  3155. called = false;
  3156. boost::asio::async_write_at(s, 1234, buffers,
  3157. boost::asio::transfer_all(),
  3158. bindns::bind(async_write_handler,
  3159. _1, _2, sizeof(write_data), &called));
  3160. ioc.restart();
  3161. ioc.run();
  3162. BOOST_ASIO_CHECK(called);
  3163. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3164. s.reset();
  3165. s.next_write_length(10);
  3166. called = false;
  3167. boost::asio::async_write_at(s, 0, buffers,
  3168. boost::asio::transfer_all(),
  3169. bindns::bind(async_write_handler,
  3170. _1, _2, sizeof(write_data), &called));
  3171. ioc.restart();
  3172. ioc.run();
  3173. BOOST_ASIO_CHECK(called);
  3174. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3175. s.reset();
  3176. s.next_write_length(10);
  3177. called = false;
  3178. boost::asio::async_write_at(s, 1234, buffers,
  3179. boost::asio::transfer_all(),
  3180. bindns::bind(async_write_handler,
  3181. _1, _2, sizeof(write_data), &called));
  3182. ioc.restart();
  3183. ioc.run();
  3184. BOOST_ASIO_CHECK(called);
  3185. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3186. s.reset();
  3187. called = false;
  3188. boost::asio::async_write_at(s, 0, buffers,
  3189. boost::asio::transfer_at_least(1),
  3190. bindns::bind(async_write_handler,
  3191. _1, _2, sizeof(write_data), &called));
  3192. ioc.restart();
  3193. ioc.run();
  3194. BOOST_ASIO_CHECK(called);
  3195. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3196. s.reset();
  3197. called = false;
  3198. boost::asio::async_write_at(s, 1234, buffers,
  3199. boost::asio::transfer_at_least(1),
  3200. bindns::bind(async_write_handler,
  3201. _1, _2, sizeof(write_data), &called));
  3202. ioc.restart();
  3203. ioc.run();
  3204. BOOST_ASIO_CHECK(called);
  3205. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3206. s.reset();
  3207. s.next_write_length(1);
  3208. called = false;
  3209. boost::asio::async_write_at(s, 0, buffers,
  3210. boost::asio::transfer_at_least(1),
  3211. bindns::bind(async_write_handler,
  3212. _1, _2, 1, &called));
  3213. ioc.restart();
  3214. ioc.run();
  3215. BOOST_ASIO_CHECK(called);
  3216. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  3217. s.reset();
  3218. s.next_write_length(1);
  3219. called = false;
  3220. boost::asio::async_write_at(s, 1234, buffers,
  3221. boost::asio::transfer_at_least(1),
  3222. bindns::bind(async_write_handler,
  3223. _1, _2, 1, &called));
  3224. ioc.restart();
  3225. ioc.run();
  3226. BOOST_ASIO_CHECK(called);
  3227. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  3228. s.reset();
  3229. s.next_write_length(10);
  3230. called = false;
  3231. boost::asio::async_write_at(s, 0, buffers,
  3232. boost::asio::transfer_at_least(1),
  3233. bindns::bind(async_write_handler,
  3234. _1, _2, 10, &called));
  3235. ioc.restart();
  3236. ioc.run();
  3237. BOOST_ASIO_CHECK(called);
  3238. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  3239. s.reset();
  3240. s.next_write_length(10);
  3241. called = false;
  3242. boost::asio::async_write_at(s, 1234, buffers,
  3243. boost::asio::transfer_at_least(1),
  3244. bindns::bind(async_write_handler,
  3245. _1, _2, 10, &called));
  3246. ioc.restart();
  3247. ioc.run();
  3248. BOOST_ASIO_CHECK(called);
  3249. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  3250. s.reset();
  3251. called = false;
  3252. boost::asio::async_write_at(s, 0, buffers,
  3253. boost::asio::transfer_at_least(10),
  3254. bindns::bind(async_write_handler,
  3255. _1, _2, sizeof(write_data), &called));
  3256. ioc.restart();
  3257. ioc.run();
  3258. BOOST_ASIO_CHECK(called);
  3259. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3260. s.reset();
  3261. called = false;
  3262. boost::asio::async_write_at(s, 1234, buffers,
  3263. boost::asio::transfer_at_least(10),
  3264. bindns::bind(async_write_handler,
  3265. _1, _2, sizeof(write_data), &called));
  3266. ioc.restart();
  3267. ioc.run();
  3268. BOOST_ASIO_CHECK(called);
  3269. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3270. s.reset();
  3271. s.next_write_length(1);
  3272. called = false;
  3273. boost::asio::async_write_at(s, 0, buffers,
  3274. boost::asio::transfer_at_least(10),
  3275. bindns::bind(async_write_handler,
  3276. _1, _2, 10, &called));
  3277. ioc.restart();
  3278. ioc.run();
  3279. BOOST_ASIO_CHECK(called);
  3280. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  3281. s.reset();
  3282. s.next_write_length(1);
  3283. called = false;
  3284. boost::asio::async_write_at(s, 1234, buffers,
  3285. boost::asio::transfer_at_least(10),
  3286. bindns::bind(async_write_handler,
  3287. _1, _2, 10, &called));
  3288. ioc.restart();
  3289. ioc.run();
  3290. BOOST_ASIO_CHECK(called);
  3291. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  3292. s.reset();
  3293. s.next_write_length(10);
  3294. called = false;
  3295. boost::asio::async_write_at(s, 0, buffers,
  3296. boost::asio::transfer_at_least(10),
  3297. bindns::bind(async_write_handler,
  3298. _1, _2, 10, &called));
  3299. ioc.restart();
  3300. ioc.run();
  3301. BOOST_ASIO_CHECK(called);
  3302. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  3303. s.reset();
  3304. s.next_write_length(10);
  3305. called = false;
  3306. boost::asio::async_write_at(s, 1234, buffers,
  3307. boost::asio::transfer_at_least(10),
  3308. bindns::bind(async_write_handler,
  3309. _1, _2, 10, &called));
  3310. ioc.restart();
  3311. ioc.run();
  3312. BOOST_ASIO_CHECK(called);
  3313. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  3314. s.reset();
  3315. called = false;
  3316. boost::asio::async_write_at(s, 0, buffers,
  3317. boost::asio::transfer_at_least(42),
  3318. bindns::bind(async_write_handler,
  3319. _1, _2, sizeof(write_data), &called));
  3320. ioc.restart();
  3321. ioc.run();
  3322. BOOST_ASIO_CHECK(called);
  3323. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3324. s.reset();
  3325. called = false;
  3326. boost::asio::async_write_at(s, 1234, buffers,
  3327. boost::asio::transfer_at_least(42),
  3328. bindns::bind(async_write_handler,
  3329. _1, _2, sizeof(write_data), &called));
  3330. ioc.restart();
  3331. ioc.run();
  3332. BOOST_ASIO_CHECK(called);
  3333. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3334. s.reset();
  3335. s.next_write_length(1);
  3336. called = false;
  3337. boost::asio::async_write_at(s, 0, buffers,
  3338. boost::asio::transfer_at_least(42),
  3339. bindns::bind(async_write_handler,
  3340. _1, _2, 42, &called));
  3341. ioc.restart();
  3342. ioc.run();
  3343. BOOST_ASIO_CHECK(called);
  3344. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  3345. s.reset();
  3346. s.next_write_length(1);
  3347. called = false;
  3348. boost::asio::async_write_at(s, 1234, buffers,
  3349. boost::asio::transfer_at_least(42),
  3350. bindns::bind(async_write_handler,
  3351. _1, _2, 42, &called));
  3352. ioc.restart();
  3353. ioc.run();
  3354. BOOST_ASIO_CHECK(called);
  3355. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  3356. s.reset();
  3357. s.next_write_length(10);
  3358. called = false;
  3359. boost::asio::async_write_at(s, 0, buffers,
  3360. boost::asio::transfer_at_least(42),
  3361. bindns::bind(async_write_handler,
  3362. _1, _2, 50, &called));
  3363. ioc.restart();
  3364. ioc.run();
  3365. BOOST_ASIO_CHECK(called);
  3366. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  3367. s.reset();
  3368. s.next_write_length(10);
  3369. called = false;
  3370. boost::asio::async_write_at(s, 1234, buffers,
  3371. boost::asio::transfer_at_least(42),
  3372. bindns::bind(async_write_handler,
  3373. _1, _2, 50, &called));
  3374. ioc.restart();
  3375. ioc.run();
  3376. BOOST_ASIO_CHECK(called);
  3377. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  3378. s.reset();
  3379. called = false;
  3380. boost::asio::async_write_at(s, 0, buffers,
  3381. boost::asio::transfer_exactly(1),
  3382. bindns::bind(async_write_handler,
  3383. _1, _2, 1, &called));
  3384. ioc.restart();
  3385. ioc.run();
  3386. BOOST_ASIO_CHECK(called);
  3387. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  3388. s.reset();
  3389. called = false;
  3390. boost::asio::async_write_at(s, 1234, buffers,
  3391. boost::asio::transfer_exactly(1),
  3392. bindns::bind(async_write_handler,
  3393. _1, _2, 1, &called));
  3394. ioc.restart();
  3395. ioc.run();
  3396. BOOST_ASIO_CHECK(called);
  3397. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  3398. s.reset();
  3399. s.next_write_length(1);
  3400. called = false;
  3401. boost::asio::async_write_at(s, 0, buffers,
  3402. boost::asio::transfer_exactly(1),
  3403. bindns::bind(async_write_handler,
  3404. _1, _2, 1, &called));
  3405. ioc.restart();
  3406. ioc.run();
  3407. BOOST_ASIO_CHECK(called);
  3408. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  3409. s.reset();
  3410. s.next_write_length(1);
  3411. called = false;
  3412. boost::asio::async_write_at(s, 1234, buffers,
  3413. boost::asio::transfer_exactly(1),
  3414. bindns::bind(async_write_handler,
  3415. _1, _2, 1, &called));
  3416. ioc.restart();
  3417. ioc.run();
  3418. BOOST_ASIO_CHECK(called);
  3419. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  3420. s.reset();
  3421. s.next_write_length(10);
  3422. called = false;
  3423. boost::asio::async_write_at(s, 0, buffers,
  3424. boost::asio::transfer_exactly(1),
  3425. bindns::bind(async_write_handler,
  3426. _1, _2, 1, &called));
  3427. ioc.restart();
  3428. ioc.run();
  3429. BOOST_ASIO_CHECK(called);
  3430. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  3431. s.reset();
  3432. s.next_write_length(10);
  3433. called = false;
  3434. boost::asio::async_write_at(s, 1234, buffers,
  3435. boost::asio::transfer_exactly(1),
  3436. bindns::bind(async_write_handler,
  3437. _1, _2, 1, &called));
  3438. ioc.restart();
  3439. ioc.run();
  3440. BOOST_ASIO_CHECK(called);
  3441. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  3442. s.reset();
  3443. called = false;
  3444. boost::asio::async_write_at(s, 0, buffers,
  3445. boost::asio::transfer_exactly(10),
  3446. bindns::bind(async_write_handler,
  3447. _1, _2, 10, &called));
  3448. ioc.restart();
  3449. ioc.run();
  3450. BOOST_ASIO_CHECK(called);
  3451. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  3452. s.reset();
  3453. called = false;
  3454. boost::asio::async_write_at(s, 1234, buffers,
  3455. boost::asio::transfer_exactly(10),
  3456. bindns::bind(async_write_handler,
  3457. _1, _2, 10, &called));
  3458. ioc.restart();
  3459. ioc.run();
  3460. BOOST_ASIO_CHECK(called);
  3461. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  3462. s.reset();
  3463. s.next_write_length(1);
  3464. called = false;
  3465. boost::asio::async_write_at(s, 0, buffers,
  3466. boost::asio::transfer_exactly(10),
  3467. bindns::bind(async_write_handler,
  3468. _1, _2, 10, &called));
  3469. ioc.restart();
  3470. ioc.run();
  3471. BOOST_ASIO_CHECK(called);
  3472. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  3473. s.reset();
  3474. s.next_write_length(1);
  3475. called = false;
  3476. boost::asio::async_write_at(s, 1234, buffers,
  3477. boost::asio::transfer_exactly(10),
  3478. bindns::bind(async_write_handler,
  3479. _1, _2, 10, &called));
  3480. ioc.restart();
  3481. ioc.run();
  3482. BOOST_ASIO_CHECK(called);
  3483. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  3484. s.reset();
  3485. s.next_write_length(10);
  3486. called = false;
  3487. boost::asio::async_write_at(s, 0, buffers,
  3488. boost::asio::transfer_exactly(10),
  3489. bindns::bind(async_write_handler,
  3490. _1, _2, 10, &called));
  3491. ioc.restart();
  3492. ioc.run();
  3493. BOOST_ASIO_CHECK(called);
  3494. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  3495. s.reset();
  3496. s.next_write_length(10);
  3497. called = false;
  3498. boost::asio::async_write_at(s, 1234, buffers,
  3499. boost::asio::transfer_exactly(10),
  3500. bindns::bind(async_write_handler,
  3501. _1, _2, 10, &called));
  3502. ioc.restart();
  3503. ioc.run();
  3504. BOOST_ASIO_CHECK(called);
  3505. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  3506. s.reset();
  3507. called = false;
  3508. boost::asio::async_write_at(s, 0, buffers,
  3509. boost::asio::transfer_exactly(42),
  3510. bindns::bind(async_write_handler,
  3511. _1, _2, 42, &called));
  3512. ioc.restart();
  3513. ioc.run();
  3514. BOOST_ASIO_CHECK(called);
  3515. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  3516. s.reset();
  3517. called = false;
  3518. boost::asio::async_write_at(s, 1234, buffers,
  3519. boost::asio::transfer_exactly(42),
  3520. bindns::bind(async_write_handler,
  3521. _1, _2, 42, &called));
  3522. ioc.restart();
  3523. ioc.run();
  3524. BOOST_ASIO_CHECK(called);
  3525. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  3526. s.reset();
  3527. s.next_write_length(1);
  3528. called = false;
  3529. boost::asio::async_write_at(s, 0, buffers,
  3530. boost::asio::transfer_exactly(42),
  3531. bindns::bind(async_write_handler,
  3532. _1, _2, 42, &called));
  3533. ioc.restart();
  3534. ioc.run();
  3535. BOOST_ASIO_CHECK(called);
  3536. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  3537. s.reset();
  3538. s.next_write_length(1);
  3539. called = false;
  3540. boost::asio::async_write_at(s, 1234, buffers,
  3541. boost::asio::transfer_exactly(42),
  3542. bindns::bind(async_write_handler,
  3543. _1, _2, 42, &called));
  3544. ioc.restart();
  3545. ioc.run();
  3546. BOOST_ASIO_CHECK(called);
  3547. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  3548. s.reset();
  3549. s.next_write_length(10);
  3550. called = false;
  3551. boost::asio::async_write_at(s, 0, buffers,
  3552. boost::asio::transfer_exactly(42),
  3553. bindns::bind(async_write_handler,
  3554. _1, _2, 42, &called));
  3555. ioc.restart();
  3556. ioc.run();
  3557. BOOST_ASIO_CHECK(called);
  3558. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  3559. s.reset();
  3560. s.next_write_length(10);
  3561. called = false;
  3562. boost::asio::async_write_at(s, 1234, buffers,
  3563. boost::asio::transfer_exactly(42),
  3564. bindns::bind(async_write_handler,
  3565. _1, _2, 42, &called));
  3566. ioc.restart();
  3567. ioc.run();
  3568. BOOST_ASIO_CHECK(called);
  3569. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  3570. s.reset();
  3571. called = false;
  3572. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  3573. bindns::bind(async_write_handler,
  3574. _1, _2, sizeof(write_data), &called));
  3575. ioc.restart();
  3576. ioc.run();
  3577. BOOST_ASIO_CHECK(called);
  3578. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3579. s.reset();
  3580. called = false;
  3581. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  3582. bindns::bind(async_write_handler,
  3583. _1, _2, sizeof(write_data), &called));
  3584. ioc.restart();
  3585. ioc.run();
  3586. BOOST_ASIO_CHECK(called);
  3587. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3588. s.reset();
  3589. s.next_write_length(1);
  3590. called = false;
  3591. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  3592. bindns::bind(async_write_handler,
  3593. _1, _2, sizeof(write_data), &called));
  3594. ioc.restart();
  3595. ioc.run();
  3596. BOOST_ASIO_CHECK(called);
  3597. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3598. s.reset();
  3599. s.next_write_length(1);
  3600. called = false;
  3601. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  3602. bindns::bind(async_write_handler,
  3603. _1, _2, sizeof(write_data), &called));
  3604. ioc.restart();
  3605. ioc.run();
  3606. BOOST_ASIO_CHECK(called);
  3607. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3608. s.reset();
  3609. s.next_write_length(10);
  3610. called = false;
  3611. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  3612. bindns::bind(async_write_handler,
  3613. _1, _2, sizeof(write_data), &called));
  3614. ioc.restart();
  3615. ioc.run();
  3616. BOOST_ASIO_CHECK(called);
  3617. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3618. s.reset();
  3619. s.next_write_length(10);
  3620. called = false;
  3621. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  3622. bindns::bind(async_write_handler,
  3623. _1, _2, sizeof(write_data), &called));
  3624. ioc.restart();
  3625. ioc.run();
  3626. BOOST_ASIO_CHECK(called);
  3627. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3628. s.reset();
  3629. called = false;
  3630. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  3631. bindns::bind(async_write_handler,
  3632. _1, _2, sizeof(write_data), &called));
  3633. ioc.restart();
  3634. ioc.run();
  3635. BOOST_ASIO_CHECK(called);
  3636. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3637. s.reset();
  3638. called = false;
  3639. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  3640. bindns::bind(async_write_handler,
  3641. _1, _2, sizeof(write_data), &called));
  3642. ioc.restart();
  3643. ioc.run();
  3644. BOOST_ASIO_CHECK(called);
  3645. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3646. s.reset();
  3647. s.next_write_length(1);
  3648. called = false;
  3649. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  3650. bindns::bind(async_write_handler,
  3651. _1, _2, sizeof(write_data), &called));
  3652. ioc.restart();
  3653. ioc.run();
  3654. BOOST_ASIO_CHECK(called);
  3655. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3656. s.reset();
  3657. s.next_write_length(1);
  3658. called = false;
  3659. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  3660. bindns::bind(async_write_handler,
  3661. _1, _2, sizeof(write_data), &called));
  3662. ioc.restart();
  3663. ioc.run();
  3664. BOOST_ASIO_CHECK(called);
  3665. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3666. s.reset();
  3667. s.next_write_length(10);
  3668. called = false;
  3669. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  3670. bindns::bind(async_write_handler,
  3671. _1, _2, sizeof(write_data), &called));
  3672. ioc.restart();
  3673. ioc.run();
  3674. BOOST_ASIO_CHECK(called);
  3675. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3676. s.reset();
  3677. s.next_write_length(10);
  3678. called = false;
  3679. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  3680. bindns::bind(async_write_handler,
  3681. _1, _2, sizeof(write_data), &called));
  3682. ioc.restart();
  3683. ioc.run();
  3684. BOOST_ASIO_CHECK(called);
  3685. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  3686. s.reset();
  3687. int i = boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  3688. archetypes::lazy_handler());
  3689. BOOST_ASIO_CHECK(i == 42);
  3690. ioc.restart();
  3691. ioc.run();
  3692. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  3693. }
  3694. void test_5_arg_mutable_buffer_async_write_at()
  3695. {
  3696. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  3697. namespace bindns = boost;
  3698. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  3699. namespace bindns = std;
  3700. using std::placeholders::_1;
  3701. using std::placeholders::_2;
  3702. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  3703. boost::asio::io_context ioc;
  3704. test_random_access_device s(ioc);
  3705. boost::asio::mutable_buffer buffers
  3706. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  3707. s.reset();
  3708. bool called = false;
  3709. boost::asio::async_write_at(s, 0, buffers,
  3710. boost::asio::transfer_all(),
  3711. bindns::bind(async_write_handler,
  3712. _1, _2, sizeof(mutable_write_data), &called));
  3713. ioc.restart();
  3714. ioc.run();
  3715. BOOST_ASIO_CHECK(called);
  3716. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  3717. s.reset();
  3718. called = false;
  3719. boost::asio::async_write_at(s, 1234, buffers,
  3720. boost::asio::transfer_all(),
  3721. bindns::bind(async_write_handler,
  3722. _1, _2, sizeof(mutable_write_data), &called));
  3723. ioc.restart();
  3724. ioc.run();
  3725. BOOST_ASIO_CHECK(called);
  3726. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  3727. s.reset();
  3728. s.next_write_length(1);
  3729. called = false;
  3730. boost::asio::async_write_at(s, 0, buffers,
  3731. boost::asio::transfer_all(),
  3732. bindns::bind(async_write_handler,
  3733. _1, _2, sizeof(mutable_write_data), &called));
  3734. ioc.restart();
  3735. ioc.run();
  3736. BOOST_ASIO_CHECK(called);
  3737. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  3738. s.reset();
  3739. s.next_write_length(1);
  3740. called = false;
  3741. boost::asio::async_write_at(s, 1234, buffers,
  3742. boost::asio::transfer_all(),
  3743. bindns::bind(async_write_handler,
  3744. _1, _2, sizeof(mutable_write_data), &called));
  3745. ioc.restart();
  3746. ioc.run();
  3747. BOOST_ASIO_CHECK(called);
  3748. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  3749. s.reset();
  3750. s.next_write_length(10);
  3751. called = false;
  3752. boost::asio::async_write_at(s, 0, buffers,
  3753. boost::asio::transfer_all(),
  3754. bindns::bind(async_write_handler,
  3755. _1, _2, sizeof(mutable_write_data), &called));
  3756. ioc.restart();
  3757. ioc.run();
  3758. BOOST_ASIO_CHECK(called);
  3759. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  3760. s.reset();
  3761. s.next_write_length(10);
  3762. called = false;
  3763. boost::asio::async_write_at(s, 1234, buffers,
  3764. boost::asio::transfer_all(),
  3765. bindns::bind(async_write_handler,
  3766. _1, _2, sizeof(mutable_write_data), &called));
  3767. ioc.restart();
  3768. ioc.run();
  3769. BOOST_ASIO_CHECK(called);
  3770. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  3771. s.reset();
  3772. called = false;
  3773. boost::asio::async_write_at(s, 0, buffers,
  3774. boost::asio::transfer_at_least(1),
  3775. bindns::bind(async_write_handler,
  3776. _1, _2, sizeof(mutable_write_data), &called));
  3777. ioc.restart();
  3778. ioc.run();
  3779. BOOST_ASIO_CHECK(called);
  3780. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  3781. s.reset();
  3782. called = false;
  3783. boost::asio::async_write_at(s, 1234, buffers,
  3784. boost::asio::transfer_at_least(1),
  3785. bindns::bind(async_write_handler,
  3786. _1, _2, sizeof(mutable_write_data), &called));
  3787. ioc.restart();
  3788. ioc.run();
  3789. BOOST_ASIO_CHECK(called);
  3790. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  3791. s.reset();
  3792. s.next_write_length(1);
  3793. called = false;
  3794. boost::asio::async_write_at(s, 0, buffers,
  3795. boost::asio::transfer_at_least(1),
  3796. bindns::bind(async_write_handler,
  3797. _1, _2, 1, &called));
  3798. ioc.restart();
  3799. ioc.run();
  3800. BOOST_ASIO_CHECK(called);
  3801. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  3802. s.reset();
  3803. s.next_write_length(1);
  3804. called = false;
  3805. boost::asio::async_write_at(s, 1234, buffers,
  3806. boost::asio::transfer_at_least(1),
  3807. bindns::bind(async_write_handler,
  3808. _1, _2, 1, &called));
  3809. ioc.restart();
  3810. ioc.run();
  3811. BOOST_ASIO_CHECK(called);
  3812. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  3813. s.reset();
  3814. s.next_write_length(10);
  3815. called = false;
  3816. boost::asio::async_write_at(s, 0, buffers,
  3817. boost::asio::transfer_at_least(1),
  3818. bindns::bind(async_write_handler,
  3819. _1, _2, 10, &called));
  3820. ioc.restart();
  3821. ioc.run();
  3822. BOOST_ASIO_CHECK(called);
  3823. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  3824. s.reset();
  3825. s.next_write_length(10);
  3826. called = false;
  3827. boost::asio::async_write_at(s, 1234, buffers,
  3828. boost::asio::transfer_at_least(1),
  3829. bindns::bind(async_write_handler,
  3830. _1, _2, 10, &called));
  3831. ioc.restart();
  3832. ioc.run();
  3833. BOOST_ASIO_CHECK(called);
  3834. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  3835. s.reset();
  3836. called = false;
  3837. boost::asio::async_write_at(s, 0, buffers,
  3838. boost::asio::transfer_at_least(10),
  3839. bindns::bind(async_write_handler,
  3840. _1, _2, sizeof(mutable_write_data), &called));
  3841. ioc.restart();
  3842. ioc.run();
  3843. BOOST_ASIO_CHECK(called);
  3844. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  3845. s.reset();
  3846. called = false;
  3847. boost::asio::async_write_at(s, 1234, buffers,
  3848. boost::asio::transfer_at_least(10),
  3849. bindns::bind(async_write_handler,
  3850. _1, _2, sizeof(mutable_write_data), &called));
  3851. ioc.restart();
  3852. ioc.run();
  3853. BOOST_ASIO_CHECK(called);
  3854. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  3855. s.reset();
  3856. s.next_write_length(1);
  3857. called = false;
  3858. boost::asio::async_write_at(s, 0, buffers,
  3859. boost::asio::transfer_at_least(10),
  3860. bindns::bind(async_write_handler,
  3861. _1, _2, 10, &called));
  3862. ioc.restart();
  3863. ioc.run();
  3864. BOOST_ASIO_CHECK(called);
  3865. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  3866. s.reset();
  3867. s.next_write_length(1);
  3868. called = false;
  3869. boost::asio::async_write_at(s, 1234, buffers,
  3870. boost::asio::transfer_at_least(10),
  3871. bindns::bind(async_write_handler,
  3872. _1, _2, 10, &called));
  3873. ioc.restart();
  3874. ioc.run();
  3875. BOOST_ASIO_CHECK(called);
  3876. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  3877. s.reset();
  3878. s.next_write_length(10);
  3879. called = false;
  3880. boost::asio::async_write_at(s, 0, buffers,
  3881. boost::asio::transfer_at_least(10),
  3882. bindns::bind(async_write_handler,
  3883. _1, _2, 10, &called));
  3884. ioc.restart();
  3885. ioc.run();
  3886. BOOST_ASIO_CHECK(called);
  3887. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  3888. s.reset();
  3889. s.next_write_length(10);
  3890. called = false;
  3891. boost::asio::async_write_at(s, 1234, buffers,
  3892. boost::asio::transfer_at_least(10),
  3893. bindns::bind(async_write_handler,
  3894. _1, _2, 10, &called));
  3895. ioc.restart();
  3896. ioc.run();
  3897. BOOST_ASIO_CHECK(called);
  3898. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  3899. s.reset();
  3900. called = false;
  3901. boost::asio::async_write_at(s, 0, buffers,
  3902. boost::asio::transfer_at_least(42),
  3903. bindns::bind(async_write_handler,
  3904. _1, _2, sizeof(mutable_write_data), &called));
  3905. ioc.restart();
  3906. ioc.run();
  3907. BOOST_ASIO_CHECK(called);
  3908. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  3909. s.reset();
  3910. called = false;
  3911. boost::asio::async_write_at(s, 1234, buffers,
  3912. boost::asio::transfer_at_least(42),
  3913. bindns::bind(async_write_handler,
  3914. _1, _2, sizeof(mutable_write_data), &called));
  3915. ioc.restart();
  3916. ioc.run();
  3917. BOOST_ASIO_CHECK(called);
  3918. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  3919. s.reset();
  3920. s.next_write_length(1);
  3921. called = false;
  3922. boost::asio::async_write_at(s, 0, buffers,
  3923. boost::asio::transfer_at_least(42),
  3924. bindns::bind(async_write_handler,
  3925. _1, _2, 42, &called));
  3926. ioc.restart();
  3927. ioc.run();
  3928. BOOST_ASIO_CHECK(called);
  3929. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  3930. s.reset();
  3931. s.next_write_length(1);
  3932. called = false;
  3933. boost::asio::async_write_at(s, 1234, buffers,
  3934. boost::asio::transfer_at_least(42),
  3935. bindns::bind(async_write_handler,
  3936. _1, _2, 42, &called));
  3937. ioc.restart();
  3938. ioc.run();
  3939. BOOST_ASIO_CHECK(called);
  3940. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  3941. s.reset();
  3942. s.next_write_length(10);
  3943. called = false;
  3944. boost::asio::async_write_at(s, 0, buffers,
  3945. boost::asio::transfer_at_least(42),
  3946. bindns::bind(async_write_handler,
  3947. _1, _2, 50, &called));
  3948. ioc.restart();
  3949. ioc.run();
  3950. BOOST_ASIO_CHECK(called);
  3951. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  3952. s.reset();
  3953. s.next_write_length(10);
  3954. called = false;
  3955. boost::asio::async_write_at(s, 1234, buffers,
  3956. boost::asio::transfer_at_least(42),
  3957. bindns::bind(async_write_handler,
  3958. _1, _2, 50, &called));
  3959. ioc.restart();
  3960. ioc.run();
  3961. BOOST_ASIO_CHECK(called);
  3962. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  3963. s.reset();
  3964. called = false;
  3965. boost::asio::async_write_at(s, 0, buffers,
  3966. boost::asio::transfer_exactly(1),
  3967. bindns::bind(async_write_handler,
  3968. _1, _2, 1, &called));
  3969. ioc.restart();
  3970. ioc.run();
  3971. BOOST_ASIO_CHECK(called);
  3972. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  3973. s.reset();
  3974. called = false;
  3975. boost::asio::async_write_at(s, 1234, buffers,
  3976. boost::asio::transfer_exactly(1),
  3977. bindns::bind(async_write_handler,
  3978. _1, _2, 1, &called));
  3979. ioc.restart();
  3980. ioc.run();
  3981. BOOST_ASIO_CHECK(called);
  3982. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  3983. s.reset();
  3984. s.next_write_length(1);
  3985. called = false;
  3986. boost::asio::async_write_at(s, 0, buffers,
  3987. boost::asio::transfer_exactly(1),
  3988. bindns::bind(async_write_handler,
  3989. _1, _2, 1, &called));
  3990. ioc.restart();
  3991. ioc.run();
  3992. BOOST_ASIO_CHECK(called);
  3993. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  3994. s.reset();
  3995. s.next_write_length(1);
  3996. called = false;
  3997. boost::asio::async_write_at(s, 1234, buffers,
  3998. boost::asio::transfer_exactly(1),
  3999. bindns::bind(async_write_handler,
  4000. _1, _2, 1, &called));
  4001. ioc.restart();
  4002. ioc.run();
  4003. BOOST_ASIO_CHECK(called);
  4004. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  4005. s.reset();
  4006. s.next_write_length(10);
  4007. called = false;
  4008. boost::asio::async_write_at(s, 0, buffers,
  4009. boost::asio::transfer_exactly(1),
  4010. bindns::bind(async_write_handler,
  4011. _1, _2, 1, &called));
  4012. ioc.restart();
  4013. ioc.run();
  4014. BOOST_ASIO_CHECK(called);
  4015. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  4016. s.reset();
  4017. s.next_write_length(10);
  4018. called = false;
  4019. boost::asio::async_write_at(s, 1234, buffers,
  4020. boost::asio::transfer_exactly(1),
  4021. bindns::bind(async_write_handler,
  4022. _1, _2, 1, &called));
  4023. ioc.restart();
  4024. ioc.run();
  4025. BOOST_ASIO_CHECK(called);
  4026. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  4027. s.reset();
  4028. called = false;
  4029. boost::asio::async_write_at(s, 0, buffers,
  4030. boost::asio::transfer_exactly(10),
  4031. bindns::bind(async_write_handler,
  4032. _1, _2, 10, &called));
  4033. ioc.restart();
  4034. ioc.run();
  4035. BOOST_ASIO_CHECK(called);
  4036. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  4037. s.reset();
  4038. called = false;
  4039. boost::asio::async_write_at(s, 1234, buffers,
  4040. boost::asio::transfer_exactly(10),
  4041. bindns::bind(async_write_handler,
  4042. _1, _2, 10, &called));
  4043. ioc.restart();
  4044. ioc.run();
  4045. BOOST_ASIO_CHECK(called);
  4046. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  4047. s.reset();
  4048. s.next_write_length(1);
  4049. called = false;
  4050. boost::asio::async_write_at(s, 0, buffers,
  4051. boost::asio::transfer_exactly(10),
  4052. bindns::bind(async_write_handler,
  4053. _1, _2, 10, &called));
  4054. ioc.restart();
  4055. ioc.run();
  4056. BOOST_ASIO_CHECK(called);
  4057. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  4058. s.reset();
  4059. s.next_write_length(1);
  4060. called = false;
  4061. boost::asio::async_write_at(s, 1234, buffers,
  4062. boost::asio::transfer_exactly(10),
  4063. bindns::bind(async_write_handler,
  4064. _1, _2, 10, &called));
  4065. ioc.restart();
  4066. ioc.run();
  4067. BOOST_ASIO_CHECK(called);
  4068. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  4069. s.reset();
  4070. s.next_write_length(10);
  4071. called = false;
  4072. boost::asio::async_write_at(s, 0, buffers,
  4073. boost::asio::transfer_exactly(10),
  4074. bindns::bind(async_write_handler,
  4075. _1, _2, 10, &called));
  4076. ioc.restart();
  4077. ioc.run();
  4078. BOOST_ASIO_CHECK(called);
  4079. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  4080. s.reset();
  4081. s.next_write_length(10);
  4082. called = false;
  4083. boost::asio::async_write_at(s, 1234, buffers,
  4084. boost::asio::transfer_exactly(10),
  4085. bindns::bind(async_write_handler,
  4086. _1, _2, 10, &called));
  4087. ioc.restart();
  4088. ioc.run();
  4089. BOOST_ASIO_CHECK(called);
  4090. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  4091. s.reset();
  4092. called = false;
  4093. boost::asio::async_write_at(s, 0, buffers,
  4094. boost::asio::transfer_exactly(42),
  4095. bindns::bind(async_write_handler,
  4096. _1, _2, 42, &called));
  4097. ioc.restart();
  4098. ioc.run();
  4099. BOOST_ASIO_CHECK(called);
  4100. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  4101. s.reset();
  4102. called = false;
  4103. boost::asio::async_write_at(s, 1234, buffers,
  4104. boost::asio::transfer_exactly(42),
  4105. bindns::bind(async_write_handler,
  4106. _1, _2, 42, &called));
  4107. ioc.restart();
  4108. ioc.run();
  4109. BOOST_ASIO_CHECK(called);
  4110. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  4111. s.reset();
  4112. s.next_write_length(1);
  4113. called = false;
  4114. boost::asio::async_write_at(s, 0, buffers,
  4115. boost::asio::transfer_exactly(42),
  4116. bindns::bind(async_write_handler,
  4117. _1, _2, 42, &called));
  4118. ioc.restart();
  4119. ioc.run();
  4120. BOOST_ASIO_CHECK(called);
  4121. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  4122. s.reset();
  4123. s.next_write_length(1);
  4124. called = false;
  4125. boost::asio::async_write_at(s, 1234, buffers,
  4126. boost::asio::transfer_exactly(42),
  4127. bindns::bind(async_write_handler,
  4128. _1, _2, 42, &called));
  4129. ioc.restart();
  4130. ioc.run();
  4131. BOOST_ASIO_CHECK(called);
  4132. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  4133. s.reset();
  4134. s.next_write_length(10);
  4135. called = false;
  4136. boost::asio::async_write_at(s, 0, buffers,
  4137. boost::asio::transfer_exactly(42),
  4138. bindns::bind(async_write_handler,
  4139. _1, _2, 42, &called));
  4140. ioc.restart();
  4141. ioc.run();
  4142. BOOST_ASIO_CHECK(called);
  4143. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  4144. s.reset();
  4145. s.next_write_length(10);
  4146. called = false;
  4147. boost::asio::async_write_at(s, 1234, buffers,
  4148. boost::asio::transfer_exactly(42),
  4149. bindns::bind(async_write_handler,
  4150. _1, _2, 42, &called));
  4151. ioc.restart();
  4152. ioc.run();
  4153. BOOST_ASIO_CHECK(called);
  4154. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  4155. s.reset();
  4156. called = false;
  4157. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  4158. bindns::bind(async_write_handler,
  4159. _1, _2, sizeof(mutable_write_data), &called));
  4160. ioc.restart();
  4161. ioc.run();
  4162. BOOST_ASIO_CHECK(called);
  4163. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  4164. s.reset();
  4165. called = false;
  4166. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  4167. bindns::bind(async_write_handler,
  4168. _1, _2, sizeof(mutable_write_data), &called));
  4169. ioc.restart();
  4170. ioc.run();
  4171. BOOST_ASIO_CHECK(called);
  4172. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  4173. s.reset();
  4174. s.next_write_length(1);
  4175. called = false;
  4176. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  4177. bindns::bind(async_write_handler,
  4178. _1, _2, sizeof(mutable_write_data), &called));
  4179. ioc.restart();
  4180. ioc.run();
  4181. BOOST_ASIO_CHECK(called);
  4182. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  4183. s.reset();
  4184. s.next_write_length(1);
  4185. called = false;
  4186. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  4187. bindns::bind(async_write_handler,
  4188. _1, _2, sizeof(mutable_write_data), &called));
  4189. ioc.restart();
  4190. ioc.run();
  4191. BOOST_ASIO_CHECK(called);
  4192. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  4193. s.reset();
  4194. s.next_write_length(10);
  4195. called = false;
  4196. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  4197. bindns::bind(async_write_handler,
  4198. _1, _2, sizeof(mutable_write_data), &called));
  4199. ioc.restart();
  4200. ioc.run();
  4201. BOOST_ASIO_CHECK(called);
  4202. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  4203. s.reset();
  4204. s.next_write_length(10);
  4205. called = false;
  4206. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  4207. bindns::bind(async_write_handler,
  4208. _1, _2, sizeof(mutable_write_data), &called));
  4209. ioc.restart();
  4210. ioc.run();
  4211. BOOST_ASIO_CHECK(called);
  4212. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  4213. s.reset();
  4214. called = false;
  4215. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  4216. bindns::bind(async_write_handler,
  4217. _1, _2, sizeof(mutable_write_data), &called));
  4218. ioc.restart();
  4219. ioc.run();
  4220. BOOST_ASIO_CHECK(called);
  4221. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  4222. s.reset();
  4223. called = false;
  4224. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  4225. bindns::bind(async_write_handler,
  4226. _1, _2, sizeof(mutable_write_data), &called));
  4227. ioc.restart();
  4228. ioc.run();
  4229. BOOST_ASIO_CHECK(called);
  4230. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  4231. s.reset();
  4232. s.next_write_length(1);
  4233. called = false;
  4234. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  4235. bindns::bind(async_write_handler,
  4236. _1, _2, sizeof(mutable_write_data), &called));
  4237. ioc.restart();
  4238. ioc.run();
  4239. BOOST_ASIO_CHECK(called);
  4240. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  4241. s.reset();
  4242. s.next_write_length(1);
  4243. called = false;
  4244. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  4245. bindns::bind(async_write_handler,
  4246. _1, _2, sizeof(mutable_write_data), &called));
  4247. ioc.restart();
  4248. ioc.run();
  4249. BOOST_ASIO_CHECK(called);
  4250. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  4251. s.reset();
  4252. s.next_write_length(10);
  4253. called = false;
  4254. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  4255. bindns::bind(async_write_handler,
  4256. _1, _2, sizeof(mutable_write_data), &called));
  4257. ioc.restart();
  4258. ioc.run();
  4259. BOOST_ASIO_CHECK(called);
  4260. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(mutable_write_data)));
  4261. s.reset();
  4262. s.next_write_length(10);
  4263. called = false;
  4264. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  4265. bindns::bind(async_write_handler,
  4266. _1, _2, sizeof(mutable_write_data), &called));
  4267. ioc.restart();
  4268. ioc.run();
  4269. BOOST_ASIO_CHECK(called);
  4270. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(mutable_write_data)));
  4271. s.reset();
  4272. int i = boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  4273. archetypes::lazy_handler());
  4274. BOOST_ASIO_CHECK(i == 42);
  4275. ioc.restart();
  4276. ioc.run();
  4277. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4278. }
  4279. void test_5_arg_boost_array_buffers_async_write_at()
  4280. {
  4281. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  4282. namespace bindns = boost;
  4283. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  4284. namespace bindns = std;
  4285. using std::placeholders::_1;
  4286. using std::placeholders::_2;
  4287. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  4288. #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  4289. boost::asio::io_context ioc;
  4290. test_random_access_device s(ioc);
  4291. boost::array<boost::asio::const_buffer, 2> buffers = { {
  4292. boost::asio::buffer(write_data, 32),
  4293. boost::asio::buffer(write_data) + 32 } };
  4294. s.reset();
  4295. bool called = false;
  4296. boost::asio::async_write_at(s, 0, buffers,
  4297. boost::asio::transfer_all(),
  4298. bindns::bind(async_write_handler,
  4299. _1, _2, sizeof(write_data), &called));
  4300. ioc.restart();
  4301. ioc.run();
  4302. BOOST_ASIO_CHECK(called);
  4303. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4304. s.reset();
  4305. called = false;
  4306. boost::asio::async_write_at(s, 1234, buffers,
  4307. boost::asio::transfer_all(),
  4308. bindns::bind(async_write_handler,
  4309. _1, _2, sizeof(write_data), &called));
  4310. ioc.restart();
  4311. ioc.run();
  4312. BOOST_ASIO_CHECK(called);
  4313. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4314. s.reset();
  4315. s.next_write_length(1);
  4316. called = false;
  4317. boost::asio::async_write_at(s, 0, buffers,
  4318. boost::asio::transfer_all(),
  4319. bindns::bind(async_write_handler,
  4320. _1, _2, sizeof(write_data), &called));
  4321. ioc.restart();
  4322. ioc.run();
  4323. BOOST_ASIO_CHECK(called);
  4324. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4325. s.reset();
  4326. s.next_write_length(1);
  4327. called = false;
  4328. boost::asio::async_write_at(s, 1234, buffers,
  4329. boost::asio::transfer_all(),
  4330. bindns::bind(async_write_handler,
  4331. _1, _2, sizeof(write_data), &called));
  4332. ioc.restart();
  4333. ioc.run();
  4334. BOOST_ASIO_CHECK(called);
  4335. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4336. s.reset();
  4337. s.next_write_length(10);
  4338. called = false;
  4339. boost::asio::async_write_at(s, 0, buffers,
  4340. boost::asio::transfer_all(),
  4341. bindns::bind(async_write_handler,
  4342. _1, _2, sizeof(write_data), &called));
  4343. ioc.restart();
  4344. ioc.run();
  4345. BOOST_ASIO_CHECK(called);
  4346. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4347. s.reset();
  4348. s.next_write_length(10);
  4349. called = false;
  4350. boost::asio::async_write_at(s, 1234, buffers,
  4351. boost::asio::transfer_all(),
  4352. bindns::bind(async_write_handler,
  4353. _1, _2, sizeof(write_data), &called));
  4354. ioc.restart();
  4355. ioc.run();
  4356. BOOST_ASIO_CHECK(called);
  4357. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4358. s.reset();
  4359. called = false;
  4360. boost::asio::async_write_at(s, 0, buffers,
  4361. boost::asio::transfer_at_least(1),
  4362. bindns::bind(async_write_handler,
  4363. _1, _2, sizeof(write_data), &called));
  4364. ioc.restart();
  4365. ioc.run();
  4366. BOOST_ASIO_CHECK(called);
  4367. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4368. s.reset();
  4369. called = false;
  4370. boost::asio::async_write_at(s, 1234, buffers,
  4371. boost::asio::transfer_at_least(1),
  4372. bindns::bind(async_write_handler,
  4373. _1, _2, sizeof(write_data), &called));
  4374. ioc.restart();
  4375. ioc.run();
  4376. BOOST_ASIO_CHECK(called);
  4377. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4378. s.reset();
  4379. s.next_write_length(1);
  4380. called = false;
  4381. boost::asio::async_write_at(s, 0, buffers,
  4382. boost::asio::transfer_at_least(1),
  4383. bindns::bind(async_write_handler,
  4384. _1, _2, 1, &called));
  4385. ioc.restart();
  4386. ioc.run();
  4387. BOOST_ASIO_CHECK(called);
  4388. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  4389. s.reset();
  4390. s.next_write_length(1);
  4391. called = false;
  4392. boost::asio::async_write_at(s, 1234, buffers,
  4393. boost::asio::transfer_at_least(1),
  4394. bindns::bind(async_write_handler,
  4395. _1, _2, 1, &called));
  4396. ioc.restart();
  4397. ioc.run();
  4398. BOOST_ASIO_CHECK(called);
  4399. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  4400. s.reset();
  4401. s.next_write_length(10);
  4402. called = false;
  4403. boost::asio::async_write_at(s, 0, buffers,
  4404. boost::asio::transfer_at_least(1),
  4405. bindns::bind(async_write_handler,
  4406. _1, _2, 10, &called));
  4407. ioc.restart();
  4408. ioc.run();
  4409. BOOST_ASIO_CHECK(called);
  4410. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  4411. s.reset();
  4412. s.next_write_length(10);
  4413. called = false;
  4414. boost::asio::async_write_at(s, 1234, buffers,
  4415. boost::asio::transfer_at_least(1),
  4416. bindns::bind(async_write_handler,
  4417. _1, _2, 10, &called));
  4418. ioc.restart();
  4419. ioc.run();
  4420. BOOST_ASIO_CHECK(called);
  4421. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  4422. s.reset();
  4423. called = false;
  4424. boost::asio::async_write_at(s, 0, buffers,
  4425. boost::asio::transfer_at_least(10),
  4426. bindns::bind(async_write_handler,
  4427. _1, _2, sizeof(write_data), &called));
  4428. ioc.restart();
  4429. ioc.run();
  4430. BOOST_ASIO_CHECK(called);
  4431. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4432. s.reset();
  4433. called = false;
  4434. boost::asio::async_write_at(s, 1234, buffers,
  4435. boost::asio::transfer_at_least(10),
  4436. bindns::bind(async_write_handler,
  4437. _1, _2, sizeof(write_data), &called));
  4438. ioc.restart();
  4439. ioc.run();
  4440. BOOST_ASIO_CHECK(called);
  4441. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4442. s.reset();
  4443. s.next_write_length(1);
  4444. called = false;
  4445. boost::asio::async_write_at(s, 0, buffers,
  4446. boost::asio::transfer_at_least(10),
  4447. bindns::bind(async_write_handler,
  4448. _1, _2, 10, &called));
  4449. ioc.restart();
  4450. ioc.run();
  4451. BOOST_ASIO_CHECK(called);
  4452. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  4453. s.reset();
  4454. s.next_write_length(1);
  4455. called = false;
  4456. boost::asio::async_write_at(s, 1234, buffers,
  4457. boost::asio::transfer_at_least(10),
  4458. bindns::bind(async_write_handler,
  4459. _1, _2, 10, &called));
  4460. ioc.restart();
  4461. ioc.run();
  4462. BOOST_ASIO_CHECK(called);
  4463. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  4464. s.reset();
  4465. s.next_write_length(10);
  4466. called = false;
  4467. boost::asio::async_write_at(s, 0, buffers,
  4468. boost::asio::transfer_at_least(10),
  4469. bindns::bind(async_write_handler,
  4470. _1, _2, 10, &called));
  4471. ioc.restart();
  4472. ioc.run();
  4473. BOOST_ASIO_CHECK(called);
  4474. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  4475. s.reset();
  4476. s.next_write_length(10);
  4477. called = false;
  4478. boost::asio::async_write_at(s, 1234, buffers,
  4479. boost::asio::transfer_at_least(10),
  4480. bindns::bind(async_write_handler,
  4481. _1, _2, 10, &called));
  4482. ioc.restart();
  4483. ioc.run();
  4484. BOOST_ASIO_CHECK(called);
  4485. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  4486. s.reset();
  4487. called = false;
  4488. boost::asio::async_write_at(s, 0, buffers,
  4489. boost::asio::transfer_at_least(42),
  4490. bindns::bind(async_write_handler,
  4491. _1, _2, sizeof(write_data), &called));
  4492. ioc.restart();
  4493. ioc.run();
  4494. BOOST_ASIO_CHECK(called);
  4495. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4496. s.reset();
  4497. called = false;
  4498. boost::asio::async_write_at(s, 1234, buffers,
  4499. boost::asio::transfer_at_least(42),
  4500. bindns::bind(async_write_handler,
  4501. _1, _2, sizeof(write_data), &called));
  4502. ioc.restart();
  4503. ioc.run();
  4504. BOOST_ASIO_CHECK(called);
  4505. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4506. s.reset();
  4507. s.next_write_length(1);
  4508. called = false;
  4509. boost::asio::async_write_at(s, 0, buffers,
  4510. boost::asio::transfer_at_least(42),
  4511. bindns::bind(async_write_handler,
  4512. _1, _2, 42, &called));
  4513. ioc.restart();
  4514. ioc.run();
  4515. BOOST_ASIO_CHECK(called);
  4516. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  4517. s.reset();
  4518. s.next_write_length(1);
  4519. called = false;
  4520. boost::asio::async_write_at(s, 1234, buffers,
  4521. boost::asio::transfer_at_least(42),
  4522. bindns::bind(async_write_handler,
  4523. _1, _2, 42, &called));
  4524. ioc.restart();
  4525. ioc.run();
  4526. BOOST_ASIO_CHECK(called);
  4527. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  4528. s.reset();
  4529. s.next_write_length(10);
  4530. called = false;
  4531. boost::asio::async_write_at(s, 0, buffers,
  4532. boost::asio::transfer_at_least(42),
  4533. bindns::bind(async_write_handler,
  4534. _1, _2, 50, &called));
  4535. ioc.restart();
  4536. ioc.run();
  4537. BOOST_ASIO_CHECK(called);
  4538. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  4539. s.reset();
  4540. s.next_write_length(10);
  4541. called = false;
  4542. boost::asio::async_write_at(s, 1234, buffers,
  4543. boost::asio::transfer_at_least(42),
  4544. bindns::bind(async_write_handler,
  4545. _1, _2, 50, &called));
  4546. ioc.restart();
  4547. ioc.run();
  4548. BOOST_ASIO_CHECK(called);
  4549. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  4550. s.reset();
  4551. called = false;
  4552. boost::asio::async_write_at(s, 0, buffers,
  4553. boost::asio::transfer_exactly(1),
  4554. bindns::bind(async_write_handler,
  4555. _1, _2, 1, &called));
  4556. ioc.restart();
  4557. ioc.run();
  4558. BOOST_ASIO_CHECK(called);
  4559. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  4560. s.reset();
  4561. called = false;
  4562. boost::asio::async_write_at(s, 1234, buffers,
  4563. boost::asio::transfer_exactly(1),
  4564. bindns::bind(async_write_handler,
  4565. _1, _2, 1, &called));
  4566. ioc.restart();
  4567. ioc.run();
  4568. BOOST_ASIO_CHECK(called);
  4569. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  4570. s.reset();
  4571. s.next_write_length(1);
  4572. called = false;
  4573. boost::asio::async_write_at(s, 0, buffers,
  4574. boost::asio::transfer_exactly(1),
  4575. bindns::bind(async_write_handler,
  4576. _1, _2, 1, &called));
  4577. ioc.restart();
  4578. ioc.run();
  4579. BOOST_ASIO_CHECK(called);
  4580. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  4581. s.reset();
  4582. s.next_write_length(1);
  4583. called = false;
  4584. boost::asio::async_write_at(s, 1234, buffers,
  4585. boost::asio::transfer_exactly(1),
  4586. bindns::bind(async_write_handler,
  4587. _1, _2, 1, &called));
  4588. ioc.restart();
  4589. ioc.run();
  4590. BOOST_ASIO_CHECK(called);
  4591. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  4592. s.reset();
  4593. s.next_write_length(10);
  4594. called = false;
  4595. boost::asio::async_write_at(s, 0, buffers,
  4596. boost::asio::transfer_exactly(1),
  4597. bindns::bind(async_write_handler,
  4598. _1, _2, 1, &called));
  4599. ioc.restart();
  4600. ioc.run();
  4601. BOOST_ASIO_CHECK(called);
  4602. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  4603. s.reset();
  4604. s.next_write_length(10);
  4605. called = false;
  4606. boost::asio::async_write_at(s, 1234, buffers,
  4607. boost::asio::transfer_exactly(1),
  4608. bindns::bind(async_write_handler,
  4609. _1, _2, 1, &called));
  4610. ioc.restart();
  4611. ioc.run();
  4612. BOOST_ASIO_CHECK(called);
  4613. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  4614. s.reset();
  4615. called = false;
  4616. boost::asio::async_write_at(s, 0, buffers,
  4617. boost::asio::transfer_exactly(10),
  4618. bindns::bind(async_write_handler,
  4619. _1, _2, 10, &called));
  4620. ioc.restart();
  4621. ioc.run();
  4622. BOOST_ASIO_CHECK(called);
  4623. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  4624. s.reset();
  4625. called = false;
  4626. boost::asio::async_write_at(s, 1234, buffers,
  4627. boost::asio::transfer_exactly(10),
  4628. bindns::bind(async_write_handler,
  4629. _1, _2, 10, &called));
  4630. ioc.restart();
  4631. ioc.run();
  4632. BOOST_ASIO_CHECK(called);
  4633. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  4634. s.reset();
  4635. s.next_write_length(1);
  4636. called = false;
  4637. boost::asio::async_write_at(s, 0, buffers,
  4638. boost::asio::transfer_exactly(10),
  4639. bindns::bind(async_write_handler,
  4640. _1, _2, 10, &called));
  4641. ioc.restart();
  4642. ioc.run();
  4643. BOOST_ASIO_CHECK(called);
  4644. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  4645. s.reset();
  4646. s.next_write_length(1);
  4647. called = false;
  4648. boost::asio::async_write_at(s, 1234, buffers,
  4649. boost::asio::transfer_exactly(10),
  4650. bindns::bind(async_write_handler,
  4651. _1, _2, 10, &called));
  4652. ioc.restart();
  4653. ioc.run();
  4654. BOOST_ASIO_CHECK(called);
  4655. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  4656. s.reset();
  4657. s.next_write_length(10);
  4658. called = false;
  4659. boost::asio::async_write_at(s, 0, buffers,
  4660. boost::asio::transfer_exactly(10),
  4661. bindns::bind(async_write_handler,
  4662. _1, _2, 10, &called));
  4663. ioc.restart();
  4664. ioc.run();
  4665. BOOST_ASIO_CHECK(called);
  4666. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  4667. s.reset();
  4668. s.next_write_length(10);
  4669. called = false;
  4670. boost::asio::async_write_at(s, 1234, buffers,
  4671. boost::asio::transfer_exactly(10),
  4672. bindns::bind(async_write_handler,
  4673. _1, _2, 10, &called));
  4674. ioc.restart();
  4675. ioc.run();
  4676. BOOST_ASIO_CHECK(called);
  4677. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  4678. s.reset();
  4679. called = false;
  4680. boost::asio::async_write_at(s, 0, buffers,
  4681. boost::asio::transfer_exactly(42),
  4682. bindns::bind(async_write_handler,
  4683. _1, _2, 42, &called));
  4684. ioc.restart();
  4685. ioc.run();
  4686. BOOST_ASIO_CHECK(called);
  4687. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  4688. s.reset();
  4689. called = false;
  4690. boost::asio::async_write_at(s, 1234, buffers,
  4691. boost::asio::transfer_exactly(42),
  4692. bindns::bind(async_write_handler,
  4693. _1, _2, 42, &called));
  4694. ioc.restart();
  4695. ioc.run();
  4696. BOOST_ASIO_CHECK(called);
  4697. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  4698. s.reset();
  4699. s.next_write_length(1);
  4700. called = false;
  4701. boost::asio::async_write_at(s, 0, buffers,
  4702. boost::asio::transfer_exactly(42),
  4703. bindns::bind(async_write_handler,
  4704. _1, _2, 42, &called));
  4705. ioc.restart();
  4706. ioc.run();
  4707. BOOST_ASIO_CHECK(called);
  4708. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  4709. s.reset();
  4710. s.next_write_length(1);
  4711. called = false;
  4712. boost::asio::async_write_at(s, 1234, buffers,
  4713. boost::asio::transfer_exactly(42),
  4714. bindns::bind(async_write_handler,
  4715. _1, _2, 42, &called));
  4716. ioc.restart();
  4717. ioc.run();
  4718. BOOST_ASIO_CHECK(called);
  4719. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  4720. s.reset();
  4721. s.next_write_length(10);
  4722. called = false;
  4723. boost::asio::async_write_at(s, 0, buffers,
  4724. boost::asio::transfer_exactly(42),
  4725. bindns::bind(async_write_handler,
  4726. _1, _2, 42, &called));
  4727. ioc.restart();
  4728. ioc.run();
  4729. BOOST_ASIO_CHECK(called);
  4730. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  4731. s.reset();
  4732. s.next_write_length(10);
  4733. called = false;
  4734. boost::asio::async_write_at(s, 1234, buffers,
  4735. boost::asio::transfer_exactly(42),
  4736. bindns::bind(async_write_handler,
  4737. _1, _2, 42, &called));
  4738. ioc.restart();
  4739. ioc.run();
  4740. BOOST_ASIO_CHECK(called);
  4741. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  4742. s.reset();
  4743. called = false;
  4744. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  4745. bindns::bind(async_write_handler,
  4746. _1, _2, sizeof(write_data), &called));
  4747. ioc.restart();
  4748. ioc.run();
  4749. BOOST_ASIO_CHECK(called);
  4750. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4751. s.reset();
  4752. called = false;
  4753. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  4754. bindns::bind(async_write_handler,
  4755. _1, _2, sizeof(write_data), &called));
  4756. ioc.restart();
  4757. ioc.run();
  4758. BOOST_ASIO_CHECK(called);
  4759. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4760. s.reset();
  4761. s.next_write_length(1);
  4762. called = false;
  4763. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  4764. bindns::bind(async_write_handler,
  4765. _1, _2, sizeof(write_data), &called));
  4766. ioc.restart();
  4767. ioc.run();
  4768. BOOST_ASIO_CHECK(called);
  4769. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4770. s.reset();
  4771. s.next_write_length(1);
  4772. called = false;
  4773. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  4774. bindns::bind(async_write_handler,
  4775. _1, _2, sizeof(write_data), &called));
  4776. ioc.restart();
  4777. ioc.run();
  4778. BOOST_ASIO_CHECK(called);
  4779. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4780. s.reset();
  4781. s.next_write_length(10);
  4782. called = false;
  4783. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  4784. bindns::bind(async_write_handler,
  4785. _1, _2, sizeof(write_data), &called));
  4786. ioc.restart();
  4787. ioc.run();
  4788. BOOST_ASIO_CHECK(called);
  4789. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4790. s.reset();
  4791. s.next_write_length(10);
  4792. called = false;
  4793. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  4794. bindns::bind(async_write_handler,
  4795. _1, _2, sizeof(write_data), &called));
  4796. ioc.restart();
  4797. ioc.run();
  4798. BOOST_ASIO_CHECK(called);
  4799. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4800. s.reset();
  4801. called = false;
  4802. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  4803. bindns::bind(async_write_handler,
  4804. _1, _2, sizeof(write_data), &called));
  4805. ioc.restart();
  4806. ioc.run();
  4807. BOOST_ASIO_CHECK(called);
  4808. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4809. s.reset();
  4810. called = false;
  4811. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  4812. bindns::bind(async_write_handler,
  4813. _1, _2, sizeof(write_data), &called));
  4814. ioc.restart();
  4815. ioc.run();
  4816. BOOST_ASIO_CHECK(called);
  4817. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4818. s.reset();
  4819. s.next_write_length(1);
  4820. called = false;
  4821. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  4822. bindns::bind(async_write_handler,
  4823. _1, _2, sizeof(write_data), &called));
  4824. ioc.restart();
  4825. ioc.run();
  4826. BOOST_ASIO_CHECK(called);
  4827. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4828. s.reset();
  4829. s.next_write_length(1);
  4830. called = false;
  4831. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  4832. bindns::bind(async_write_handler,
  4833. _1, _2, sizeof(write_data), &called));
  4834. ioc.restart();
  4835. ioc.run();
  4836. BOOST_ASIO_CHECK(called);
  4837. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4838. s.reset();
  4839. s.next_write_length(10);
  4840. called = false;
  4841. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  4842. bindns::bind(async_write_handler,
  4843. _1, _2, sizeof(write_data), &called));
  4844. ioc.restart();
  4845. ioc.run();
  4846. BOOST_ASIO_CHECK(called);
  4847. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4848. s.reset();
  4849. s.next_write_length(10);
  4850. called = false;
  4851. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  4852. bindns::bind(async_write_handler,
  4853. _1, _2, sizeof(write_data), &called));
  4854. ioc.restart();
  4855. ioc.run();
  4856. BOOST_ASIO_CHECK(called);
  4857. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4858. s.reset();
  4859. int i = boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  4860. archetypes::lazy_handler());
  4861. BOOST_ASIO_CHECK(i == 42);
  4862. ioc.restart();
  4863. ioc.run();
  4864. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4865. #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  4866. }
  4867. void test_5_arg_std_array_buffers_async_write_at()
  4868. {
  4869. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  4870. namespace bindns = boost;
  4871. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  4872. namespace bindns = std;
  4873. using std::placeholders::_1;
  4874. using std::placeholders::_2;
  4875. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  4876. #if defined(BOOST_ASIO_HAS_STD_ARRAY)
  4877. boost::asio::io_context ioc;
  4878. test_random_access_device s(ioc);
  4879. std::array<boost::asio::const_buffer, 2> buffers = { {
  4880. boost::asio::buffer(write_data, 32),
  4881. boost::asio::buffer(write_data) + 32 } };
  4882. s.reset();
  4883. bool called = false;
  4884. boost::asio::async_write_at(s, 0, buffers,
  4885. boost::asio::transfer_all(),
  4886. bindns::bind(async_write_handler,
  4887. _1, _2, sizeof(write_data), &called));
  4888. ioc.restart();
  4889. ioc.run();
  4890. BOOST_ASIO_CHECK(called);
  4891. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4892. s.reset();
  4893. called = false;
  4894. boost::asio::async_write_at(s, 1234, buffers,
  4895. boost::asio::transfer_all(),
  4896. bindns::bind(async_write_handler,
  4897. _1, _2, sizeof(write_data), &called));
  4898. ioc.restart();
  4899. ioc.run();
  4900. BOOST_ASIO_CHECK(called);
  4901. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4902. s.reset();
  4903. s.next_write_length(1);
  4904. called = false;
  4905. boost::asio::async_write_at(s, 0, buffers,
  4906. boost::asio::transfer_all(),
  4907. bindns::bind(async_write_handler,
  4908. _1, _2, sizeof(write_data), &called));
  4909. ioc.restart();
  4910. ioc.run();
  4911. BOOST_ASIO_CHECK(called);
  4912. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4913. s.reset();
  4914. s.next_write_length(1);
  4915. called = false;
  4916. boost::asio::async_write_at(s, 1234, buffers,
  4917. boost::asio::transfer_all(),
  4918. bindns::bind(async_write_handler,
  4919. _1, _2, sizeof(write_data), &called));
  4920. ioc.restart();
  4921. ioc.run();
  4922. BOOST_ASIO_CHECK(called);
  4923. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4924. s.reset();
  4925. s.next_write_length(10);
  4926. called = false;
  4927. boost::asio::async_write_at(s, 0, buffers,
  4928. boost::asio::transfer_all(),
  4929. bindns::bind(async_write_handler,
  4930. _1, _2, sizeof(write_data), &called));
  4931. ioc.restart();
  4932. ioc.run();
  4933. BOOST_ASIO_CHECK(called);
  4934. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4935. s.reset();
  4936. s.next_write_length(10);
  4937. called = false;
  4938. boost::asio::async_write_at(s, 1234, buffers,
  4939. boost::asio::transfer_all(),
  4940. bindns::bind(async_write_handler,
  4941. _1, _2, sizeof(write_data), &called));
  4942. ioc.restart();
  4943. ioc.run();
  4944. BOOST_ASIO_CHECK(called);
  4945. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4946. s.reset();
  4947. called = false;
  4948. boost::asio::async_write_at(s, 0, buffers,
  4949. boost::asio::transfer_at_least(1),
  4950. bindns::bind(async_write_handler,
  4951. _1, _2, sizeof(write_data), &called));
  4952. ioc.restart();
  4953. ioc.run();
  4954. BOOST_ASIO_CHECK(called);
  4955. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  4956. s.reset();
  4957. called = false;
  4958. boost::asio::async_write_at(s, 1234, buffers,
  4959. boost::asio::transfer_at_least(1),
  4960. bindns::bind(async_write_handler,
  4961. _1, _2, sizeof(write_data), &called));
  4962. ioc.restart();
  4963. ioc.run();
  4964. BOOST_ASIO_CHECK(called);
  4965. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  4966. s.reset();
  4967. s.next_write_length(1);
  4968. called = false;
  4969. boost::asio::async_write_at(s, 0, buffers,
  4970. boost::asio::transfer_at_least(1),
  4971. bindns::bind(async_write_handler,
  4972. _1, _2, 1, &called));
  4973. ioc.restart();
  4974. ioc.run();
  4975. BOOST_ASIO_CHECK(called);
  4976. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  4977. s.reset();
  4978. s.next_write_length(1);
  4979. called = false;
  4980. boost::asio::async_write_at(s, 1234, buffers,
  4981. boost::asio::transfer_at_least(1),
  4982. bindns::bind(async_write_handler,
  4983. _1, _2, 1, &called));
  4984. ioc.restart();
  4985. ioc.run();
  4986. BOOST_ASIO_CHECK(called);
  4987. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  4988. s.reset();
  4989. s.next_write_length(10);
  4990. called = false;
  4991. boost::asio::async_write_at(s, 0, buffers,
  4992. boost::asio::transfer_at_least(1),
  4993. bindns::bind(async_write_handler,
  4994. _1, _2, 10, &called));
  4995. ioc.restart();
  4996. ioc.run();
  4997. BOOST_ASIO_CHECK(called);
  4998. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  4999. s.reset();
  5000. s.next_write_length(10);
  5001. called = false;
  5002. boost::asio::async_write_at(s, 1234, buffers,
  5003. boost::asio::transfer_at_least(1),
  5004. bindns::bind(async_write_handler,
  5005. _1, _2, 10, &called));
  5006. ioc.restart();
  5007. ioc.run();
  5008. BOOST_ASIO_CHECK(called);
  5009. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5010. s.reset();
  5011. called = false;
  5012. boost::asio::async_write_at(s, 0, buffers,
  5013. boost::asio::transfer_at_least(10),
  5014. bindns::bind(async_write_handler,
  5015. _1, _2, sizeof(write_data), &called));
  5016. ioc.restart();
  5017. ioc.run();
  5018. BOOST_ASIO_CHECK(called);
  5019. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5020. s.reset();
  5021. called = false;
  5022. boost::asio::async_write_at(s, 1234, buffers,
  5023. boost::asio::transfer_at_least(10),
  5024. bindns::bind(async_write_handler,
  5025. _1, _2, sizeof(write_data), &called));
  5026. ioc.restart();
  5027. ioc.run();
  5028. BOOST_ASIO_CHECK(called);
  5029. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5030. s.reset();
  5031. s.next_write_length(1);
  5032. called = false;
  5033. boost::asio::async_write_at(s, 0, buffers,
  5034. boost::asio::transfer_at_least(10),
  5035. bindns::bind(async_write_handler,
  5036. _1, _2, 10, &called));
  5037. ioc.restart();
  5038. ioc.run();
  5039. BOOST_ASIO_CHECK(called);
  5040. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5041. s.reset();
  5042. s.next_write_length(1);
  5043. called = false;
  5044. boost::asio::async_write_at(s, 1234, buffers,
  5045. boost::asio::transfer_at_least(10),
  5046. bindns::bind(async_write_handler,
  5047. _1, _2, 10, &called));
  5048. ioc.restart();
  5049. ioc.run();
  5050. BOOST_ASIO_CHECK(called);
  5051. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5052. s.reset();
  5053. s.next_write_length(10);
  5054. called = false;
  5055. boost::asio::async_write_at(s, 0, buffers,
  5056. boost::asio::transfer_at_least(10),
  5057. bindns::bind(async_write_handler,
  5058. _1, _2, 10, &called));
  5059. ioc.restart();
  5060. ioc.run();
  5061. BOOST_ASIO_CHECK(called);
  5062. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5063. s.reset();
  5064. s.next_write_length(10);
  5065. called = false;
  5066. boost::asio::async_write_at(s, 1234, buffers,
  5067. boost::asio::transfer_at_least(10),
  5068. bindns::bind(async_write_handler,
  5069. _1, _2, 10, &called));
  5070. ioc.restart();
  5071. ioc.run();
  5072. BOOST_ASIO_CHECK(called);
  5073. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5074. s.reset();
  5075. called = false;
  5076. boost::asio::async_write_at(s, 0, buffers,
  5077. boost::asio::transfer_at_least(42),
  5078. bindns::bind(async_write_handler,
  5079. _1, _2, sizeof(write_data), &called));
  5080. ioc.restart();
  5081. ioc.run();
  5082. BOOST_ASIO_CHECK(called);
  5083. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5084. s.reset();
  5085. called = false;
  5086. boost::asio::async_write_at(s, 1234, buffers,
  5087. boost::asio::transfer_at_least(42),
  5088. bindns::bind(async_write_handler,
  5089. _1, _2, sizeof(write_data), &called));
  5090. ioc.restart();
  5091. ioc.run();
  5092. BOOST_ASIO_CHECK(called);
  5093. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5094. s.reset();
  5095. s.next_write_length(1);
  5096. called = false;
  5097. boost::asio::async_write_at(s, 0, buffers,
  5098. boost::asio::transfer_at_least(42),
  5099. bindns::bind(async_write_handler,
  5100. _1, _2, 42, &called));
  5101. ioc.restart();
  5102. ioc.run();
  5103. BOOST_ASIO_CHECK(called);
  5104. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  5105. s.reset();
  5106. s.next_write_length(1);
  5107. called = false;
  5108. boost::asio::async_write_at(s, 1234, buffers,
  5109. boost::asio::transfer_at_least(42),
  5110. bindns::bind(async_write_handler,
  5111. _1, _2, 42, &called));
  5112. ioc.restart();
  5113. ioc.run();
  5114. BOOST_ASIO_CHECK(called);
  5115. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  5116. s.reset();
  5117. s.next_write_length(10);
  5118. called = false;
  5119. boost::asio::async_write_at(s, 0, buffers,
  5120. boost::asio::transfer_at_least(42),
  5121. bindns::bind(async_write_handler,
  5122. _1, _2, 50, &called));
  5123. ioc.restart();
  5124. ioc.run();
  5125. BOOST_ASIO_CHECK(called);
  5126. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  5127. s.reset();
  5128. s.next_write_length(10);
  5129. called = false;
  5130. boost::asio::async_write_at(s, 1234, buffers,
  5131. boost::asio::transfer_at_least(42),
  5132. bindns::bind(async_write_handler,
  5133. _1, _2, 50, &called));
  5134. ioc.restart();
  5135. ioc.run();
  5136. BOOST_ASIO_CHECK(called);
  5137. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  5138. s.reset();
  5139. called = false;
  5140. boost::asio::async_write_at(s, 0, buffers,
  5141. boost::asio::transfer_exactly(1),
  5142. bindns::bind(async_write_handler,
  5143. _1, _2, 1, &called));
  5144. ioc.restart();
  5145. ioc.run();
  5146. BOOST_ASIO_CHECK(called);
  5147. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  5148. s.reset();
  5149. called = false;
  5150. boost::asio::async_write_at(s, 1234, buffers,
  5151. boost::asio::transfer_exactly(1),
  5152. bindns::bind(async_write_handler,
  5153. _1, _2, 1, &called));
  5154. ioc.restart();
  5155. ioc.run();
  5156. BOOST_ASIO_CHECK(called);
  5157. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  5158. s.reset();
  5159. s.next_write_length(1);
  5160. called = false;
  5161. boost::asio::async_write_at(s, 0, buffers,
  5162. boost::asio::transfer_exactly(1),
  5163. bindns::bind(async_write_handler,
  5164. _1, _2, 1, &called));
  5165. ioc.restart();
  5166. ioc.run();
  5167. BOOST_ASIO_CHECK(called);
  5168. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  5169. s.reset();
  5170. s.next_write_length(1);
  5171. called = false;
  5172. boost::asio::async_write_at(s, 1234, buffers,
  5173. boost::asio::transfer_exactly(1),
  5174. bindns::bind(async_write_handler,
  5175. _1, _2, 1, &called));
  5176. ioc.restart();
  5177. ioc.run();
  5178. BOOST_ASIO_CHECK(called);
  5179. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  5180. s.reset();
  5181. s.next_write_length(10);
  5182. called = false;
  5183. boost::asio::async_write_at(s, 0, buffers,
  5184. boost::asio::transfer_exactly(1),
  5185. bindns::bind(async_write_handler,
  5186. _1, _2, 1, &called));
  5187. ioc.restart();
  5188. ioc.run();
  5189. BOOST_ASIO_CHECK(called);
  5190. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  5191. s.reset();
  5192. s.next_write_length(10);
  5193. called = false;
  5194. boost::asio::async_write_at(s, 1234, buffers,
  5195. boost::asio::transfer_exactly(1),
  5196. bindns::bind(async_write_handler,
  5197. _1, _2, 1, &called));
  5198. ioc.restart();
  5199. ioc.run();
  5200. BOOST_ASIO_CHECK(called);
  5201. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  5202. s.reset();
  5203. called = false;
  5204. boost::asio::async_write_at(s, 0, buffers,
  5205. boost::asio::transfer_exactly(10),
  5206. bindns::bind(async_write_handler,
  5207. _1, _2, 10, &called));
  5208. ioc.restart();
  5209. ioc.run();
  5210. BOOST_ASIO_CHECK(called);
  5211. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5212. s.reset();
  5213. called = false;
  5214. boost::asio::async_write_at(s, 1234, buffers,
  5215. boost::asio::transfer_exactly(10),
  5216. bindns::bind(async_write_handler,
  5217. _1, _2, 10, &called));
  5218. ioc.restart();
  5219. ioc.run();
  5220. BOOST_ASIO_CHECK(called);
  5221. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5222. s.reset();
  5223. s.next_write_length(1);
  5224. called = false;
  5225. boost::asio::async_write_at(s, 0, buffers,
  5226. boost::asio::transfer_exactly(10),
  5227. bindns::bind(async_write_handler,
  5228. _1, _2, 10, &called));
  5229. ioc.restart();
  5230. ioc.run();
  5231. BOOST_ASIO_CHECK(called);
  5232. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5233. s.reset();
  5234. s.next_write_length(1);
  5235. called = false;
  5236. boost::asio::async_write_at(s, 1234, buffers,
  5237. boost::asio::transfer_exactly(10),
  5238. bindns::bind(async_write_handler,
  5239. _1, _2, 10, &called));
  5240. ioc.restart();
  5241. ioc.run();
  5242. BOOST_ASIO_CHECK(called);
  5243. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5244. s.reset();
  5245. s.next_write_length(10);
  5246. called = false;
  5247. boost::asio::async_write_at(s, 0, buffers,
  5248. boost::asio::transfer_exactly(10),
  5249. bindns::bind(async_write_handler,
  5250. _1, _2, 10, &called));
  5251. ioc.restart();
  5252. ioc.run();
  5253. BOOST_ASIO_CHECK(called);
  5254. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5255. s.reset();
  5256. s.next_write_length(10);
  5257. called = false;
  5258. boost::asio::async_write_at(s, 1234, buffers,
  5259. boost::asio::transfer_exactly(10),
  5260. bindns::bind(async_write_handler,
  5261. _1, _2, 10, &called));
  5262. ioc.restart();
  5263. ioc.run();
  5264. BOOST_ASIO_CHECK(called);
  5265. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5266. s.reset();
  5267. called = false;
  5268. boost::asio::async_write_at(s, 0, buffers,
  5269. boost::asio::transfer_exactly(42),
  5270. bindns::bind(async_write_handler,
  5271. _1, _2, 42, &called));
  5272. ioc.restart();
  5273. ioc.run();
  5274. BOOST_ASIO_CHECK(called);
  5275. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  5276. s.reset();
  5277. called = false;
  5278. boost::asio::async_write_at(s, 1234, buffers,
  5279. boost::asio::transfer_exactly(42),
  5280. bindns::bind(async_write_handler,
  5281. _1, _2, 42, &called));
  5282. ioc.restart();
  5283. ioc.run();
  5284. BOOST_ASIO_CHECK(called);
  5285. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  5286. s.reset();
  5287. s.next_write_length(1);
  5288. called = false;
  5289. boost::asio::async_write_at(s, 0, buffers,
  5290. boost::asio::transfer_exactly(42),
  5291. bindns::bind(async_write_handler,
  5292. _1, _2, 42, &called));
  5293. ioc.restart();
  5294. ioc.run();
  5295. BOOST_ASIO_CHECK(called);
  5296. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  5297. s.reset();
  5298. s.next_write_length(1);
  5299. called = false;
  5300. boost::asio::async_write_at(s, 1234, buffers,
  5301. boost::asio::transfer_exactly(42),
  5302. bindns::bind(async_write_handler,
  5303. _1, _2, 42, &called));
  5304. ioc.restart();
  5305. ioc.run();
  5306. BOOST_ASIO_CHECK(called);
  5307. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  5308. s.reset();
  5309. s.next_write_length(10);
  5310. called = false;
  5311. boost::asio::async_write_at(s, 0, buffers,
  5312. boost::asio::transfer_exactly(42),
  5313. bindns::bind(async_write_handler,
  5314. _1, _2, 42, &called));
  5315. ioc.restart();
  5316. ioc.run();
  5317. BOOST_ASIO_CHECK(called);
  5318. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  5319. s.reset();
  5320. s.next_write_length(10);
  5321. called = false;
  5322. boost::asio::async_write_at(s, 1234, buffers,
  5323. boost::asio::transfer_exactly(42),
  5324. bindns::bind(async_write_handler,
  5325. _1, _2, 42, &called));
  5326. ioc.restart();
  5327. ioc.run();
  5328. BOOST_ASIO_CHECK(called);
  5329. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  5330. s.reset();
  5331. called = false;
  5332. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  5333. bindns::bind(async_write_handler,
  5334. _1, _2, sizeof(write_data), &called));
  5335. ioc.restart();
  5336. ioc.run();
  5337. BOOST_ASIO_CHECK(called);
  5338. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5339. s.reset();
  5340. called = false;
  5341. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  5342. bindns::bind(async_write_handler,
  5343. _1, _2, sizeof(write_data), &called));
  5344. ioc.restart();
  5345. ioc.run();
  5346. BOOST_ASIO_CHECK(called);
  5347. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5348. s.reset();
  5349. s.next_write_length(1);
  5350. called = false;
  5351. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  5352. bindns::bind(async_write_handler,
  5353. _1, _2, sizeof(write_data), &called));
  5354. ioc.restart();
  5355. ioc.run();
  5356. BOOST_ASIO_CHECK(called);
  5357. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5358. s.reset();
  5359. s.next_write_length(1);
  5360. called = false;
  5361. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  5362. bindns::bind(async_write_handler,
  5363. _1, _2, sizeof(write_data), &called));
  5364. ioc.restart();
  5365. ioc.run();
  5366. BOOST_ASIO_CHECK(called);
  5367. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5368. s.reset();
  5369. s.next_write_length(10);
  5370. called = false;
  5371. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  5372. bindns::bind(async_write_handler,
  5373. _1, _2, sizeof(write_data), &called));
  5374. ioc.restart();
  5375. ioc.run();
  5376. BOOST_ASIO_CHECK(called);
  5377. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5378. s.reset();
  5379. s.next_write_length(10);
  5380. called = false;
  5381. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  5382. bindns::bind(async_write_handler,
  5383. _1, _2, sizeof(write_data), &called));
  5384. ioc.restart();
  5385. ioc.run();
  5386. BOOST_ASIO_CHECK(called);
  5387. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5388. s.reset();
  5389. called = false;
  5390. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  5391. bindns::bind(async_write_handler,
  5392. _1, _2, sizeof(write_data), &called));
  5393. ioc.restart();
  5394. ioc.run();
  5395. BOOST_ASIO_CHECK(called);
  5396. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5397. s.reset();
  5398. called = false;
  5399. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  5400. bindns::bind(async_write_handler,
  5401. _1, _2, sizeof(write_data), &called));
  5402. ioc.restart();
  5403. ioc.run();
  5404. BOOST_ASIO_CHECK(called);
  5405. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5406. s.reset();
  5407. s.next_write_length(1);
  5408. called = false;
  5409. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  5410. bindns::bind(async_write_handler,
  5411. _1, _2, sizeof(write_data), &called));
  5412. ioc.restart();
  5413. ioc.run();
  5414. BOOST_ASIO_CHECK(called);
  5415. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5416. s.reset();
  5417. s.next_write_length(1);
  5418. called = false;
  5419. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  5420. bindns::bind(async_write_handler,
  5421. _1, _2, sizeof(write_data), &called));
  5422. ioc.restart();
  5423. ioc.run();
  5424. BOOST_ASIO_CHECK(called);
  5425. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5426. s.reset();
  5427. s.next_write_length(10);
  5428. called = false;
  5429. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  5430. bindns::bind(async_write_handler,
  5431. _1, _2, sizeof(write_data), &called));
  5432. ioc.restart();
  5433. ioc.run();
  5434. BOOST_ASIO_CHECK(called);
  5435. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5436. s.reset();
  5437. s.next_write_length(10);
  5438. called = false;
  5439. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  5440. bindns::bind(async_write_handler,
  5441. _1, _2, sizeof(write_data), &called));
  5442. ioc.restart();
  5443. ioc.run();
  5444. BOOST_ASIO_CHECK(called);
  5445. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5446. s.reset();
  5447. int i = boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  5448. archetypes::lazy_handler());
  5449. BOOST_ASIO_CHECK(i == 42);
  5450. ioc.restart();
  5451. ioc.run();
  5452. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5453. #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
  5454. }
  5455. void test_5_arg_vector_buffers_async_write_at()
  5456. {
  5457. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  5458. namespace bindns = boost;
  5459. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  5460. namespace bindns = std;
  5461. using std::placeholders::_1;
  5462. using std::placeholders::_2;
  5463. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  5464. boost::asio::io_context ioc;
  5465. test_random_access_device s(ioc);
  5466. std::vector<boost::asio::const_buffer> buffers;
  5467. buffers.push_back(boost::asio::buffer(write_data, 32));
  5468. buffers.push_back(boost::asio::buffer(write_data) + 32);
  5469. s.reset();
  5470. bool called = false;
  5471. boost::asio::async_write_at(s, 0, buffers,
  5472. boost::asio::transfer_all(),
  5473. bindns::bind(async_write_handler,
  5474. _1, _2, sizeof(write_data), &called));
  5475. ioc.restart();
  5476. ioc.run();
  5477. BOOST_ASIO_CHECK(called);
  5478. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5479. s.reset();
  5480. called = false;
  5481. boost::asio::async_write_at(s, 1234, buffers,
  5482. boost::asio::transfer_all(),
  5483. bindns::bind(async_write_handler,
  5484. _1, _2, sizeof(write_data), &called));
  5485. ioc.restart();
  5486. ioc.run();
  5487. BOOST_ASIO_CHECK(called);
  5488. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5489. s.reset();
  5490. s.next_write_length(1);
  5491. called = false;
  5492. boost::asio::async_write_at(s, 0, buffers,
  5493. boost::asio::transfer_all(),
  5494. bindns::bind(async_write_handler,
  5495. _1, _2, sizeof(write_data), &called));
  5496. ioc.restart();
  5497. ioc.run();
  5498. BOOST_ASIO_CHECK(called);
  5499. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5500. s.reset();
  5501. s.next_write_length(1);
  5502. called = false;
  5503. boost::asio::async_write_at(s, 1234, buffers,
  5504. boost::asio::transfer_all(),
  5505. bindns::bind(async_write_handler,
  5506. _1, _2, sizeof(write_data), &called));
  5507. ioc.restart();
  5508. ioc.run();
  5509. BOOST_ASIO_CHECK(called);
  5510. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5511. s.reset();
  5512. s.next_write_length(10);
  5513. called = false;
  5514. boost::asio::async_write_at(s, 0, buffers,
  5515. boost::asio::transfer_all(),
  5516. bindns::bind(async_write_handler,
  5517. _1, _2, sizeof(write_data), &called));
  5518. ioc.restart();
  5519. ioc.run();
  5520. BOOST_ASIO_CHECK(called);
  5521. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5522. s.reset();
  5523. s.next_write_length(10);
  5524. called = false;
  5525. boost::asio::async_write_at(s, 1234, buffers,
  5526. boost::asio::transfer_all(),
  5527. bindns::bind(async_write_handler,
  5528. _1, _2, sizeof(write_data), &called));
  5529. ioc.restart();
  5530. ioc.run();
  5531. BOOST_ASIO_CHECK(called);
  5532. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5533. s.reset();
  5534. called = false;
  5535. boost::asio::async_write_at(s, 0, buffers,
  5536. boost::asio::transfer_at_least(1),
  5537. bindns::bind(async_write_handler,
  5538. _1, _2, sizeof(write_data), &called));
  5539. ioc.restart();
  5540. ioc.run();
  5541. BOOST_ASIO_CHECK(called);
  5542. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5543. s.reset();
  5544. called = false;
  5545. boost::asio::async_write_at(s, 1234, buffers,
  5546. boost::asio::transfer_at_least(1),
  5547. bindns::bind(async_write_handler,
  5548. _1, _2, sizeof(write_data), &called));
  5549. ioc.restart();
  5550. ioc.run();
  5551. BOOST_ASIO_CHECK(called);
  5552. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5553. s.reset();
  5554. s.next_write_length(1);
  5555. called = false;
  5556. boost::asio::async_write_at(s, 0, buffers,
  5557. boost::asio::transfer_at_least(1),
  5558. bindns::bind(async_write_handler,
  5559. _1, _2, 1, &called));
  5560. ioc.restart();
  5561. ioc.run();
  5562. BOOST_ASIO_CHECK(called);
  5563. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  5564. s.reset();
  5565. s.next_write_length(1);
  5566. called = false;
  5567. boost::asio::async_write_at(s, 1234, buffers,
  5568. boost::asio::transfer_at_least(1),
  5569. bindns::bind(async_write_handler,
  5570. _1, _2, 1, &called));
  5571. ioc.restart();
  5572. ioc.run();
  5573. BOOST_ASIO_CHECK(called);
  5574. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  5575. s.reset();
  5576. s.next_write_length(10);
  5577. called = false;
  5578. boost::asio::async_write_at(s, 0, buffers,
  5579. boost::asio::transfer_at_least(1),
  5580. bindns::bind(async_write_handler,
  5581. _1, _2, 10, &called));
  5582. ioc.restart();
  5583. ioc.run();
  5584. BOOST_ASIO_CHECK(called);
  5585. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5586. s.reset();
  5587. s.next_write_length(10);
  5588. called = false;
  5589. boost::asio::async_write_at(s, 1234, buffers,
  5590. boost::asio::transfer_at_least(1),
  5591. bindns::bind(async_write_handler,
  5592. _1, _2, 10, &called));
  5593. ioc.restart();
  5594. ioc.run();
  5595. BOOST_ASIO_CHECK(called);
  5596. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5597. s.reset();
  5598. called = false;
  5599. boost::asio::async_write_at(s, 0, buffers,
  5600. boost::asio::transfer_at_least(10),
  5601. bindns::bind(async_write_handler,
  5602. _1, _2, sizeof(write_data), &called));
  5603. ioc.restart();
  5604. ioc.run();
  5605. BOOST_ASIO_CHECK(called);
  5606. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5607. s.reset();
  5608. called = false;
  5609. boost::asio::async_write_at(s, 1234, buffers,
  5610. boost::asio::transfer_at_least(10),
  5611. bindns::bind(async_write_handler,
  5612. _1, _2, sizeof(write_data), &called));
  5613. ioc.restart();
  5614. ioc.run();
  5615. BOOST_ASIO_CHECK(called);
  5616. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5617. s.reset();
  5618. s.next_write_length(1);
  5619. called = false;
  5620. boost::asio::async_write_at(s, 0, buffers,
  5621. boost::asio::transfer_at_least(10),
  5622. bindns::bind(async_write_handler,
  5623. _1, _2, 10, &called));
  5624. ioc.restart();
  5625. ioc.run();
  5626. BOOST_ASIO_CHECK(called);
  5627. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5628. s.reset();
  5629. s.next_write_length(1);
  5630. called = false;
  5631. boost::asio::async_write_at(s, 1234, buffers,
  5632. boost::asio::transfer_at_least(10),
  5633. bindns::bind(async_write_handler,
  5634. _1, _2, 10, &called));
  5635. ioc.restart();
  5636. ioc.run();
  5637. BOOST_ASIO_CHECK(called);
  5638. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5639. s.reset();
  5640. s.next_write_length(10);
  5641. called = false;
  5642. boost::asio::async_write_at(s, 0, buffers,
  5643. boost::asio::transfer_at_least(10),
  5644. bindns::bind(async_write_handler,
  5645. _1, _2, 10, &called));
  5646. ioc.restart();
  5647. ioc.run();
  5648. BOOST_ASIO_CHECK(called);
  5649. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5650. s.reset();
  5651. s.next_write_length(10);
  5652. called = false;
  5653. boost::asio::async_write_at(s, 1234, buffers,
  5654. boost::asio::transfer_at_least(10),
  5655. bindns::bind(async_write_handler,
  5656. _1, _2, 10, &called));
  5657. ioc.restart();
  5658. ioc.run();
  5659. BOOST_ASIO_CHECK(called);
  5660. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5661. s.reset();
  5662. called = false;
  5663. boost::asio::async_write_at(s, 0, buffers,
  5664. boost::asio::transfer_at_least(42),
  5665. bindns::bind(async_write_handler,
  5666. _1, _2, sizeof(write_data), &called));
  5667. ioc.restart();
  5668. ioc.run();
  5669. BOOST_ASIO_CHECK(called);
  5670. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5671. s.reset();
  5672. called = false;
  5673. boost::asio::async_write_at(s, 1234, buffers,
  5674. boost::asio::transfer_at_least(42),
  5675. bindns::bind(async_write_handler,
  5676. _1, _2, sizeof(write_data), &called));
  5677. ioc.restart();
  5678. ioc.run();
  5679. BOOST_ASIO_CHECK(called);
  5680. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5681. s.reset();
  5682. s.next_write_length(1);
  5683. called = false;
  5684. boost::asio::async_write_at(s, 0, buffers,
  5685. boost::asio::transfer_at_least(42),
  5686. bindns::bind(async_write_handler,
  5687. _1, _2, 42, &called));
  5688. ioc.restart();
  5689. ioc.run();
  5690. BOOST_ASIO_CHECK(called);
  5691. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  5692. s.reset();
  5693. s.next_write_length(1);
  5694. called = false;
  5695. boost::asio::async_write_at(s, 1234, buffers,
  5696. boost::asio::transfer_at_least(42),
  5697. bindns::bind(async_write_handler,
  5698. _1, _2, 42, &called));
  5699. ioc.restart();
  5700. ioc.run();
  5701. BOOST_ASIO_CHECK(called);
  5702. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  5703. s.reset();
  5704. s.next_write_length(10);
  5705. called = false;
  5706. boost::asio::async_write_at(s, 0, buffers,
  5707. boost::asio::transfer_at_least(42),
  5708. bindns::bind(async_write_handler,
  5709. _1, _2, 50, &called));
  5710. ioc.restart();
  5711. ioc.run();
  5712. BOOST_ASIO_CHECK(called);
  5713. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  5714. s.reset();
  5715. s.next_write_length(10);
  5716. called = false;
  5717. boost::asio::async_write_at(s, 1234, buffers,
  5718. boost::asio::transfer_at_least(42),
  5719. bindns::bind(async_write_handler,
  5720. _1, _2, 50, &called));
  5721. ioc.restart();
  5722. ioc.run();
  5723. BOOST_ASIO_CHECK(called);
  5724. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  5725. s.reset();
  5726. called = false;
  5727. boost::asio::async_write_at(s, 0, buffers,
  5728. boost::asio::transfer_exactly(1),
  5729. bindns::bind(async_write_handler,
  5730. _1, _2, 1, &called));
  5731. ioc.restart();
  5732. ioc.run();
  5733. BOOST_ASIO_CHECK(called);
  5734. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  5735. s.reset();
  5736. called = false;
  5737. boost::asio::async_write_at(s, 1234, buffers,
  5738. boost::asio::transfer_exactly(1),
  5739. bindns::bind(async_write_handler,
  5740. _1, _2, 1, &called));
  5741. ioc.restart();
  5742. ioc.run();
  5743. BOOST_ASIO_CHECK(called);
  5744. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  5745. s.reset();
  5746. s.next_write_length(1);
  5747. called = false;
  5748. boost::asio::async_write_at(s, 0, buffers,
  5749. boost::asio::transfer_exactly(1),
  5750. bindns::bind(async_write_handler,
  5751. _1, _2, 1, &called));
  5752. ioc.restart();
  5753. ioc.run();
  5754. BOOST_ASIO_CHECK(called);
  5755. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  5756. s.reset();
  5757. s.next_write_length(1);
  5758. called = false;
  5759. boost::asio::async_write_at(s, 1234, buffers,
  5760. boost::asio::transfer_exactly(1),
  5761. bindns::bind(async_write_handler,
  5762. _1, _2, 1, &called));
  5763. ioc.restart();
  5764. ioc.run();
  5765. BOOST_ASIO_CHECK(called);
  5766. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  5767. s.reset();
  5768. s.next_write_length(10);
  5769. called = false;
  5770. boost::asio::async_write_at(s, 0, buffers,
  5771. boost::asio::transfer_exactly(1),
  5772. bindns::bind(async_write_handler,
  5773. _1, _2, 1, &called));
  5774. ioc.restart();
  5775. ioc.run();
  5776. BOOST_ASIO_CHECK(called);
  5777. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  5778. s.reset();
  5779. s.next_write_length(10);
  5780. called = false;
  5781. boost::asio::async_write_at(s, 1234, buffers,
  5782. boost::asio::transfer_exactly(1),
  5783. bindns::bind(async_write_handler,
  5784. _1, _2, 1, &called));
  5785. ioc.restart();
  5786. ioc.run();
  5787. BOOST_ASIO_CHECK(called);
  5788. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  5789. s.reset();
  5790. called = false;
  5791. boost::asio::async_write_at(s, 0, buffers,
  5792. boost::asio::transfer_exactly(10),
  5793. bindns::bind(async_write_handler,
  5794. _1, _2, 10, &called));
  5795. ioc.restart();
  5796. ioc.run();
  5797. BOOST_ASIO_CHECK(called);
  5798. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5799. s.reset();
  5800. called = false;
  5801. boost::asio::async_write_at(s, 1234, buffers,
  5802. boost::asio::transfer_exactly(10),
  5803. bindns::bind(async_write_handler,
  5804. _1, _2, 10, &called));
  5805. ioc.restart();
  5806. ioc.run();
  5807. BOOST_ASIO_CHECK(called);
  5808. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5809. s.reset();
  5810. s.next_write_length(1);
  5811. called = false;
  5812. boost::asio::async_write_at(s, 0, buffers,
  5813. boost::asio::transfer_exactly(10),
  5814. bindns::bind(async_write_handler,
  5815. _1, _2, 10, &called));
  5816. ioc.restart();
  5817. ioc.run();
  5818. BOOST_ASIO_CHECK(called);
  5819. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5820. s.reset();
  5821. s.next_write_length(1);
  5822. called = false;
  5823. boost::asio::async_write_at(s, 1234, buffers,
  5824. boost::asio::transfer_exactly(10),
  5825. bindns::bind(async_write_handler,
  5826. _1, _2, 10, &called));
  5827. ioc.restart();
  5828. ioc.run();
  5829. BOOST_ASIO_CHECK(called);
  5830. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5831. s.reset();
  5832. s.next_write_length(10);
  5833. called = false;
  5834. boost::asio::async_write_at(s, 0, buffers,
  5835. boost::asio::transfer_exactly(10),
  5836. bindns::bind(async_write_handler,
  5837. _1, _2, 10, &called));
  5838. ioc.restart();
  5839. ioc.run();
  5840. BOOST_ASIO_CHECK(called);
  5841. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  5842. s.reset();
  5843. s.next_write_length(10);
  5844. called = false;
  5845. boost::asio::async_write_at(s, 1234, buffers,
  5846. boost::asio::transfer_exactly(10),
  5847. bindns::bind(async_write_handler,
  5848. _1, _2, 10, &called));
  5849. ioc.restart();
  5850. ioc.run();
  5851. BOOST_ASIO_CHECK(called);
  5852. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  5853. s.reset();
  5854. called = false;
  5855. boost::asio::async_write_at(s, 0, buffers,
  5856. boost::asio::transfer_exactly(42),
  5857. bindns::bind(async_write_handler,
  5858. _1, _2, 42, &called));
  5859. ioc.restart();
  5860. ioc.run();
  5861. BOOST_ASIO_CHECK(called);
  5862. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  5863. s.reset();
  5864. called = false;
  5865. boost::asio::async_write_at(s, 1234, buffers,
  5866. boost::asio::transfer_exactly(42),
  5867. bindns::bind(async_write_handler,
  5868. _1, _2, 42, &called));
  5869. ioc.restart();
  5870. ioc.run();
  5871. BOOST_ASIO_CHECK(called);
  5872. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  5873. s.reset();
  5874. s.next_write_length(1);
  5875. called = false;
  5876. boost::asio::async_write_at(s, 0, buffers,
  5877. boost::asio::transfer_exactly(42),
  5878. bindns::bind(async_write_handler,
  5879. _1, _2, 42, &called));
  5880. ioc.restart();
  5881. ioc.run();
  5882. BOOST_ASIO_CHECK(called);
  5883. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  5884. s.reset();
  5885. s.next_write_length(1);
  5886. called = false;
  5887. boost::asio::async_write_at(s, 1234, buffers,
  5888. boost::asio::transfer_exactly(42),
  5889. bindns::bind(async_write_handler,
  5890. _1, _2, 42, &called));
  5891. ioc.restart();
  5892. ioc.run();
  5893. BOOST_ASIO_CHECK(called);
  5894. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  5895. s.reset();
  5896. s.next_write_length(10);
  5897. called = false;
  5898. boost::asio::async_write_at(s, 0, buffers,
  5899. boost::asio::transfer_exactly(42),
  5900. bindns::bind(async_write_handler,
  5901. _1, _2, 42, &called));
  5902. ioc.restart();
  5903. ioc.run();
  5904. BOOST_ASIO_CHECK(called);
  5905. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  5906. s.reset();
  5907. s.next_write_length(10);
  5908. called = false;
  5909. boost::asio::async_write_at(s, 1234, buffers,
  5910. boost::asio::transfer_exactly(42),
  5911. bindns::bind(async_write_handler,
  5912. _1, _2, 42, &called));
  5913. ioc.restart();
  5914. ioc.run();
  5915. BOOST_ASIO_CHECK(called);
  5916. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  5917. s.reset();
  5918. called = false;
  5919. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  5920. bindns::bind(async_write_handler,
  5921. _1, _2, sizeof(write_data), &called));
  5922. ioc.restart();
  5923. ioc.run();
  5924. BOOST_ASIO_CHECK(called);
  5925. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5926. s.reset();
  5927. called = false;
  5928. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  5929. bindns::bind(async_write_handler,
  5930. _1, _2, sizeof(write_data), &called));
  5931. ioc.restart();
  5932. ioc.run();
  5933. BOOST_ASIO_CHECK(called);
  5934. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5935. s.reset();
  5936. s.next_write_length(1);
  5937. called = false;
  5938. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  5939. bindns::bind(async_write_handler,
  5940. _1, _2, sizeof(write_data), &called));
  5941. ioc.restart();
  5942. ioc.run();
  5943. BOOST_ASIO_CHECK(called);
  5944. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5945. s.reset();
  5946. s.next_write_length(1);
  5947. called = false;
  5948. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  5949. bindns::bind(async_write_handler,
  5950. _1, _2, sizeof(write_data), &called));
  5951. ioc.restart();
  5952. ioc.run();
  5953. BOOST_ASIO_CHECK(called);
  5954. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5955. s.reset();
  5956. s.next_write_length(10);
  5957. called = false;
  5958. boost::asio::async_write_at(s, 0, buffers, old_style_transfer_all,
  5959. bindns::bind(async_write_handler,
  5960. _1, _2, sizeof(write_data), &called));
  5961. ioc.restart();
  5962. ioc.run();
  5963. BOOST_ASIO_CHECK(called);
  5964. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5965. s.reset();
  5966. s.next_write_length(10);
  5967. called = false;
  5968. boost::asio::async_write_at(s, 1234, buffers, old_style_transfer_all,
  5969. bindns::bind(async_write_handler,
  5970. _1, _2, sizeof(write_data), &called));
  5971. ioc.restart();
  5972. ioc.run();
  5973. BOOST_ASIO_CHECK(called);
  5974. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5975. s.reset();
  5976. called = false;
  5977. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  5978. bindns::bind(async_write_handler,
  5979. _1, _2, sizeof(write_data), &called));
  5980. ioc.restart();
  5981. ioc.run();
  5982. BOOST_ASIO_CHECK(called);
  5983. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  5984. s.reset();
  5985. called = false;
  5986. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  5987. bindns::bind(async_write_handler,
  5988. _1, _2, sizeof(write_data), &called));
  5989. ioc.restart();
  5990. ioc.run();
  5991. BOOST_ASIO_CHECK(called);
  5992. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  5993. s.reset();
  5994. s.next_write_length(1);
  5995. called = false;
  5996. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  5997. bindns::bind(async_write_handler,
  5998. _1, _2, sizeof(write_data), &called));
  5999. ioc.restart();
  6000. ioc.run();
  6001. BOOST_ASIO_CHECK(called);
  6002. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6003. s.reset();
  6004. s.next_write_length(1);
  6005. called = false;
  6006. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  6007. bindns::bind(async_write_handler,
  6008. _1, _2, sizeof(write_data), &called));
  6009. ioc.restart();
  6010. ioc.run();
  6011. BOOST_ASIO_CHECK(called);
  6012. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6013. s.reset();
  6014. s.next_write_length(10);
  6015. called = false;
  6016. boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  6017. bindns::bind(async_write_handler,
  6018. _1, _2, sizeof(write_data), &called));
  6019. ioc.restart();
  6020. ioc.run();
  6021. BOOST_ASIO_CHECK(called);
  6022. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6023. s.reset();
  6024. s.next_write_length(10);
  6025. called = false;
  6026. boost::asio::async_write_at(s, 1234, buffers, short_transfer(),
  6027. bindns::bind(async_write_handler,
  6028. _1, _2, sizeof(write_data), &called));
  6029. ioc.restart();
  6030. ioc.run();
  6031. BOOST_ASIO_CHECK(called);
  6032. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6033. s.reset();
  6034. int i = boost::asio::async_write_at(s, 0, buffers, short_transfer(),
  6035. archetypes::lazy_handler());
  6036. BOOST_ASIO_CHECK(i == 42);
  6037. ioc.restart();
  6038. ioc.run();
  6039. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6040. }
  6041. void test_5_arg_streambuf_async_write_at()
  6042. {
  6043. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  6044. namespace bindns = boost;
  6045. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  6046. namespace bindns = std;
  6047. using std::placeholders::_1;
  6048. using std::placeholders::_2;
  6049. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  6050. boost::asio::io_context ioc;
  6051. test_random_access_device s(ioc);
  6052. boost::asio::streambuf sb;
  6053. boost::asio::const_buffer buffers
  6054. = boost::asio::buffer(write_data, sizeof(write_data));
  6055. s.reset();
  6056. sb.consume(sb.size());
  6057. sb.sputn(write_data, sizeof(write_data));
  6058. bool called = false;
  6059. boost::asio::async_write_at(s, 0, sb,
  6060. boost::asio::transfer_all(),
  6061. bindns::bind(async_write_handler,
  6062. _1, _2, sizeof(write_data), &called));
  6063. ioc.restart();
  6064. ioc.run();
  6065. BOOST_ASIO_CHECK(called);
  6066. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6067. s.reset();
  6068. sb.consume(sb.size());
  6069. sb.sputn(write_data, sizeof(write_data));
  6070. called = false;
  6071. boost::asio::async_write_at(s, 1234, sb,
  6072. boost::asio::transfer_all(),
  6073. bindns::bind(async_write_handler,
  6074. _1, _2, sizeof(write_data), &called));
  6075. ioc.restart();
  6076. ioc.run();
  6077. BOOST_ASIO_CHECK(called);
  6078. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6079. s.reset();
  6080. sb.consume(sb.size());
  6081. sb.sputn(write_data, sizeof(write_data));
  6082. s.next_write_length(1);
  6083. called = false;
  6084. boost::asio::async_write_at(s, 0, sb,
  6085. boost::asio::transfer_all(),
  6086. bindns::bind(async_write_handler,
  6087. _1, _2, sizeof(write_data), &called));
  6088. ioc.restart();
  6089. ioc.run();
  6090. BOOST_ASIO_CHECK(called);
  6091. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6092. s.reset();
  6093. sb.consume(sb.size());
  6094. sb.sputn(write_data, sizeof(write_data));
  6095. s.next_write_length(1);
  6096. called = false;
  6097. boost::asio::async_write_at(s, 1234, sb,
  6098. boost::asio::transfer_all(),
  6099. bindns::bind(async_write_handler,
  6100. _1, _2, sizeof(write_data), &called));
  6101. ioc.restart();
  6102. ioc.run();
  6103. BOOST_ASIO_CHECK(called);
  6104. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6105. s.reset();
  6106. sb.consume(sb.size());
  6107. sb.sputn(write_data, sizeof(write_data));
  6108. s.next_write_length(10);
  6109. called = false;
  6110. boost::asio::async_write_at(s, 0, sb,
  6111. boost::asio::transfer_all(),
  6112. bindns::bind(async_write_handler,
  6113. _1, _2, sizeof(write_data), &called));
  6114. ioc.restart();
  6115. ioc.run();
  6116. BOOST_ASIO_CHECK(called);
  6117. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6118. s.reset();
  6119. sb.consume(sb.size());
  6120. sb.sputn(write_data, sizeof(write_data));
  6121. s.next_write_length(10);
  6122. called = false;
  6123. boost::asio::async_write_at(s, 1234, sb,
  6124. boost::asio::transfer_all(),
  6125. bindns::bind(async_write_handler,
  6126. _1, _2, sizeof(write_data), &called));
  6127. ioc.restart();
  6128. ioc.run();
  6129. BOOST_ASIO_CHECK(called);
  6130. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6131. s.reset();
  6132. sb.consume(sb.size());
  6133. sb.sputn(write_data, sizeof(write_data));
  6134. called = false;
  6135. boost::asio::async_write_at(s, 0, sb,
  6136. boost::asio::transfer_at_least(1),
  6137. bindns::bind(async_write_handler,
  6138. _1, _2, sizeof(write_data), &called));
  6139. ioc.restart();
  6140. ioc.run();
  6141. BOOST_ASIO_CHECK(called);
  6142. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6143. s.reset();
  6144. sb.consume(sb.size());
  6145. sb.sputn(write_data, sizeof(write_data));
  6146. called = false;
  6147. boost::asio::async_write_at(s, 1234, sb,
  6148. boost::asio::transfer_at_least(1),
  6149. bindns::bind(async_write_handler,
  6150. _1, _2, sizeof(write_data), &called));
  6151. ioc.restart();
  6152. ioc.run();
  6153. BOOST_ASIO_CHECK(called);
  6154. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6155. s.reset();
  6156. sb.consume(sb.size());
  6157. sb.sputn(write_data, sizeof(write_data));
  6158. s.next_write_length(1);
  6159. called = false;
  6160. boost::asio::async_write_at(s, 0, sb,
  6161. boost::asio::transfer_at_least(1),
  6162. bindns::bind(async_write_handler,
  6163. _1, _2, 1, &called));
  6164. ioc.restart();
  6165. ioc.run();
  6166. BOOST_ASIO_CHECK(called);
  6167. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  6168. s.reset();
  6169. sb.consume(sb.size());
  6170. sb.sputn(write_data, sizeof(write_data));
  6171. s.next_write_length(1);
  6172. called = false;
  6173. boost::asio::async_write_at(s, 1234, sb,
  6174. boost::asio::transfer_at_least(1),
  6175. bindns::bind(async_write_handler,
  6176. _1, _2, 1, &called));
  6177. ioc.restart();
  6178. ioc.run();
  6179. BOOST_ASIO_CHECK(called);
  6180. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  6181. s.reset();
  6182. sb.consume(sb.size());
  6183. sb.sputn(write_data, sizeof(write_data));
  6184. s.next_write_length(10);
  6185. called = false;
  6186. boost::asio::async_write_at(s, 0, sb,
  6187. boost::asio::transfer_at_least(1),
  6188. bindns::bind(async_write_handler,
  6189. _1, _2, 10, &called));
  6190. ioc.restart();
  6191. ioc.run();
  6192. BOOST_ASIO_CHECK(called);
  6193. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  6194. s.reset();
  6195. sb.consume(sb.size());
  6196. sb.sputn(write_data, sizeof(write_data));
  6197. s.next_write_length(10);
  6198. called = false;
  6199. boost::asio::async_write_at(s, 1234, sb,
  6200. boost::asio::transfer_at_least(1),
  6201. bindns::bind(async_write_handler,
  6202. _1, _2, 10, &called));
  6203. ioc.restart();
  6204. ioc.run();
  6205. BOOST_ASIO_CHECK(called);
  6206. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  6207. s.reset();
  6208. sb.consume(sb.size());
  6209. sb.sputn(write_data, sizeof(write_data));
  6210. called = false;
  6211. boost::asio::async_write_at(s, 0, sb,
  6212. boost::asio::transfer_at_least(10),
  6213. bindns::bind(async_write_handler,
  6214. _1, _2, sizeof(write_data), &called));
  6215. ioc.restart();
  6216. ioc.run();
  6217. BOOST_ASIO_CHECK(called);
  6218. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6219. s.reset();
  6220. sb.consume(sb.size());
  6221. sb.sputn(write_data, sizeof(write_data));
  6222. called = false;
  6223. boost::asio::async_write_at(s, 1234, sb,
  6224. boost::asio::transfer_at_least(10),
  6225. bindns::bind(async_write_handler,
  6226. _1, _2, sizeof(write_data), &called));
  6227. ioc.restart();
  6228. ioc.run();
  6229. BOOST_ASIO_CHECK(called);
  6230. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6231. s.reset();
  6232. sb.consume(sb.size());
  6233. sb.sputn(write_data, sizeof(write_data));
  6234. s.next_write_length(1);
  6235. called = false;
  6236. boost::asio::async_write_at(s, 0, sb,
  6237. boost::asio::transfer_at_least(10),
  6238. bindns::bind(async_write_handler,
  6239. _1, _2, 10, &called));
  6240. ioc.restart();
  6241. ioc.run();
  6242. BOOST_ASIO_CHECK(called);
  6243. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  6244. s.reset();
  6245. sb.consume(sb.size());
  6246. sb.sputn(write_data, sizeof(write_data));
  6247. s.next_write_length(1);
  6248. called = false;
  6249. boost::asio::async_write_at(s, 1234, sb,
  6250. boost::asio::transfer_at_least(10),
  6251. bindns::bind(async_write_handler,
  6252. _1, _2, 10, &called));
  6253. ioc.restart();
  6254. ioc.run();
  6255. BOOST_ASIO_CHECK(called);
  6256. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  6257. s.reset();
  6258. sb.consume(sb.size());
  6259. sb.sputn(write_data, sizeof(write_data));
  6260. s.next_write_length(10);
  6261. called = false;
  6262. boost::asio::async_write_at(s, 0, sb,
  6263. boost::asio::transfer_at_least(10),
  6264. bindns::bind(async_write_handler,
  6265. _1, _2, 10, &called));
  6266. ioc.restart();
  6267. ioc.run();
  6268. BOOST_ASIO_CHECK(called);
  6269. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  6270. s.reset();
  6271. sb.consume(sb.size());
  6272. sb.sputn(write_data, sizeof(write_data));
  6273. s.next_write_length(10);
  6274. called = false;
  6275. boost::asio::async_write_at(s, 1234, sb,
  6276. boost::asio::transfer_at_least(10),
  6277. bindns::bind(async_write_handler,
  6278. _1, _2, 10, &called));
  6279. ioc.restart();
  6280. ioc.run();
  6281. BOOST_ASIO_CHECK(called);
  6282. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  6283. s.reset();
  6284. sb.consume(sb.size());
  6285. sb.sputn(write_data, sizeof(write_data));
  6286. called = false;
  6287. boost::asio::async_write_at(s, 0, sb,
  6288. boost::asio::transfer_at_least(42),
  6289. bindns::bind(async_write_handler,
  6290. _1, _2, sizeof(write_data), &called));
  6291. ioc.restart();
  6292. ioc.run();
  6293. BOOST_ASIO_CHECK(called);
  6294. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6295. s.reset();
  6296. sb.consume(sb.size());
  6297. sb.sputn(write_data, sizeof(write_data));
  6298. called = false;
  6299. boost::asio::async_write_at(s, 1234, sb,
  6300. boost::asio::transfer_at_least(42),
  6301. bindns::bind(async_write_handler,
  6302. _1, _2, sizeof(write_data), &called));
  6303. ioc.restart();
  6304. ioc.run();
  6305. BOOST_ASIO_CHECK(called);
  6306. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6307. s.reset();
  6308. sb.consume(sb.size());
  6309. sb.sputn(write_data, sizeof(write_data));
  6310. s.next_write_length(1);
  6311. called = false;
  6312. boost::asio::async_write_at(s, 0, sb,
  6313. boost::asio::transfer_at_least(42),
  6314. bindns::bind(async_write_handler,
  6315. _1, _2, 42, &called));
  6316. ioc.restart();
  6317. ioc.run();
  6318. BOOST_ASIO_CHECK(called);
  6319. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  6320. s.reset();
  6321. sb.consume(sb.size());
  6322. sb.sputn(write_data, sizeof(write_data));
  6323. s.next_write_length(1);
  6324. called = false;
  6325. boost::asio::async_write_at(s, 1234, sb,
  6326. boost::asio::transfer_at_least(42),
  6327. bindns::bind(async_write_handler,
  6328. _1, _2, 42, &called));
  6329. ioc.restart();
  6330. ioc.run();
  6331. BOOST_ASIO_CHECK(called);
  6332. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  6333. s.reset();
  6334. sb.consume(sb.size());
  6335. sb.sputn(write_data, sizeof(write_data));
  6336. s.next_write_length(10);
  6337. called = false;
  6338. boost::asio::async_write_at(s, 0, sb,
  6339. boost::asio::transfer_at_least(42),
  6340. bindns::bind(async_write_handler,
  6341. _1, _2, 50, &called));
  6342. ioc.restart();
  6343. ioc.run();
  6344. BOOST_ASIO_CHECK(called);
  6345. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
  6346. s.reset();
  6347. sb.consume(sb.size());
  6348. sb.sputn(write_data, sizeof(write_data));
  6349. s.next_write_length(10);
  6350. called = false;
  6351. boost::asio::async_write_at(s, 1234, sb,
  6352. boost::asio::transfer_at_least(42),
  6353. bindns::bind(async_write_handler,
  6354. _1, _2, 50, &called));
  6355. ioc.restart();
  6356. ioc.run();
  6357. BOOST_ASIO_CHECK(called);
  6358. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
  6359. s.reset();
  6360. sb.consume(sb.size());
  6361. sb.sputn(write_data, sizeof(write_data));
  6362. called = false;
  6363. boost::asio::async_write_at(s, 0, sb,
  6364. boost::asio::transfer_exactly(1),
  6365. bindns::bind(async_write_handler,
  6366. _1, _2, 1, &called));
  6367. ioc.restart();
  6368. ioc.run();
  6369. BOOST_ASIO_CHECK(called);
  6370. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  6371. s.reset();
  6372. sb.consume(sb.size());
  6373. sb.sputn(write_data, sizeof(write_data));
  6374. called = false;
  6375. boost::asio::async_write_at(s, 1234, sb,
  6376. boost::asio::transfer_exactly(1),
  6377. bindns::bind(async_write_handler,
  6378. _1, _2, 1, &called));
  6379. ioc.restart();
  6380. ioc.run();
  6381. BOOST_ASIO_CHECK(called);
  6382. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  6383. s.reset();
  6384. sb.consume(sb.size());
  6385. sb.sputn(write_data, sizeof(write_data));
  6386. s.next_write_length(1);
  6387. called = false;
  6388. boost::asio::async_write_at(s, 0, sb,
  6389. boost::asio::transfer_exactly(1),
  6390. bindns::bind(async_write_handler,
  6391. _1, _2, 1, &called));
  6392. ioc.restart();
  6393. ioc.run();
  6394. BOOST_ASIO_CHECK(called);
  6395. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  6396. s.reset();
  6397. sb.consume(sb.size());
  6398. sb.sputn(write_data, sizeof(write_data));
  6399. s.next_write_length(1);
  6400. called = false;
  6401. boost::asio::async_write_at(s, 1234, sb,
  6402. boost::asio::transfer_exactly(1),
  6403. bindns::bind(async_write_handler,
  6404. _1, _2, 1, &called));
  6405. ioc.restart();
  6406. ioc.run();
  6407. BOOST_ASIO_CHECK(called);
  6408. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  6409. s.reset();
  6410. sb.consume(sb.size());
  6411. sb.sputn(write_data, sizeof(write_data));
  6412. s.next_write_length(10);
  6413. called = false;
  6414. boost::asio::async_write_at(s, 0, sb,
  6415. boost::asio::transfer_exactly(1),
  6416. bindns::bind(async_write_handler,
  6417. _1, _2, 1, &called));
  6418. ioc.restart();
  6419. ioc.run();
  6420. BOOST_ASIO_CHECK(called);
  6421. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
  6422. s.reset();
  6423. sb.consume(sb.size());
  6424. sb.sputn(write_data, sizeof(write_data));
  6425. s.next_write_length(10);
  6426. called = false;
  6427. boost::asio::async_write_at(s, 1234, sb,
  6428. boost::asio::transfer_exactly(1),
  6429. bindns::bind(async_write_handler,
  6430. _1, _2, 1, &called));
  6431. ioc.restart();
  6432. ioc.run();
  6433. BOOST_ASIO_CHECK(called);
  6434. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
  6435. s.reset();
  6436. sb.consume(sb.size());
  6437. sb.sputn(write_data, sizeof(write_data));
  6438. called = false;
  6439. boost::asio::async_write_at(s, 0, sb,
  6440. boost::asio::transfer_exactly(10),
  6441. bindns::bind(async_write_handler,
  6442. _1, _2, 10, &called));
  6443. ioc.restart();
  6444. ioc.run();
  6445. BOOST_ASIO_CHECK(called);
  6446. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  6447. s.reset();
  6448. sb.consume(sb.size());
  6449. sb.sputn(write_data, sizeof(write_data));
  6450. called = false;
  6451. boost::asio::async_write_at(s, 1234, sb,
  6452. boost::asio::transfer_exactly(10),
  6453. bindns::bind(async_write_handler,
  6454. _1, _2, 10, &called));
  6455. ioc.restart();
  6456. ioc.run();
  6457. BOOST_ASIO_CHECK(called);
  6458. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  6459. s.reset();
  6460. sb.consume(sb.size());
  6461. sb.sputn(write_data, sizeof(write_data));
  6462. s.next_write_length(1);
  6463. called = false;
  6464. boost::asio::async_write_at(s, 0, sb,
  6465. boost::asio::transfer_exactly(10),
  6466. bindns::bind(async_write_handler,
  6467. _1, _2, 10, &called));
  6468. ioc.restart();
  6469. ioc.run();
  6470. BOOST_ASIO_CHECK(called);
  6471. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  6472. s.reset();
  6473. sb.consume(sb.size());
  6474. sb.sputn(write_data, sizeof(write_data));
  6475. s.next_write_length(1);
  6476. called = false;
  6477. boost::asio::async_write_at(s, 1234, sb,
  6478. boost::asio::transfer_exactly(10),
  6479. bindns::bind(async_write_handler,
  6480. _1, _2, 10, &called));
  6481. ioc.restart();
  6482. ioc.run();
  6483. BOOST_ASIO_CHECK(called);
  6484. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  6485. s.reset();
  6486. sb.consume(sb.size());
  6487. sb.sputn(write_data, sizeof(write_data));
  6488. s.next_write_length(10);
  6489. called = false;
  6490. boost::asio::async_write_at(s, 0, sb,
  6491. boost::asio::transfer_exactly(10),
  6492. bindns::bind(async_write_handler,
  6493. _1, _2, 10, &called));
  6494. ioc.restart();
  6495. ioc.run();
  6496. BOOST_ASIO_CHECK(called);
  6497. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
  6498. s.reset();
  6499. sb.consume(sb.size());
  6500. sb.sputn(write_data, sizeof(write_data));
  6501. s.next_write_length(10);
  6502. called = false;
  6503. boost::asio::async_write_at(s, 1234, sb,
  6504. boost::asio::transfer_exactly(10),
  6505. bindns::bind(async_write_handler,
  6506. _1, _2, 10, &called));
  6507. ioc.restart();
  6508. ioc.run();
  6509. BOOST_ASIO_CHECK(called);
  6510. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
  6511. s.reset();
  6512. sb.consume(sb.size());
  6513. sb.sputn(write_data, sizeof(write_data));
  6514. called = false;
  6515. boost::asio::async_write_at(s, 0, sb,
  6516. boost::asio::transfer_exactly(42),
  6517. bindns::bind(async_write_handler,
  6518. _1, _2, 42, &called));
  6519. ioc.restart();
  6520. ioc.run();
  6521. BOOST_ASIO_CHECK(called);
  6522. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  6523. s.reset();
  6524. sb.consume(sb.size());
  6525. sb.sputn(write_data, sizeof(write_data));
  6526. called = false;
  6527. boost::asio::async_write_at(s, 1234, sb,
  6528. boost::asio::transfer_exactly(42),
  6529. bindns::bind(async_write_handler,
  6530. _1, _2, 42, &called));
  6531. ioc.restart();
  6532. ioc.run();
  6533. BOOST_ASIO_CHECK(called);
  6534. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  6535. s.reset();
  6536. sb.consume(sb.size());
  6537. sb.sputn(write_data, sizeof(write_data));
  6538. s.next_write_length(1);
  6539. called = false;
  6540. boost::asio::async_write_at(s, 0, sb,
  6541. boost::asio::transfer_exactly(42),
  6542. bindns::bind(async_write_handler,
  6543. _1, _2, 42, &called));
  6544. ioc.restart();
  6545. ioc.run();
  6546. BOOST_ASIO_CHECK(called);
  6547. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  6548. s.reset();
  6549. sb.consume(sb.size());
  6550. sb.sputn(write_data, sizeof(write_data));
  6551. s.next_write_length(1);
  6552. called = false;
  6553. boost::asio::async_write_at(s, 1234, sb,
  6554. boost::asio::transfer_exactly(42),
  6555. bindns::bind(async_write_handler,
  6556. _1, _2, 42, &called));
  6557. ioc.restart();
  6558. ioc.run();
  6559. BOOST_ASIO_CHECK(called);
  6560. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  6561. s.reset();
  6562. sb.consume(sb.size());
  6563. sb.sputn(write_data, sizeof(write_data));
  6564. s.next_write_length(10);
  6565. called = false;
  6566. boost::asio::async_write_at(s, 0, sb,
  6567. boost::asio::transfer_exactly(42),
  6568. bindns::bind(async_write_handler,
  6569. _1, _2, 42, &called));
  6570. ioc.restart();
  6571. ioc.run();
  6572. BOOST_ASIO_CHECK(called);
  6573. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
  6574. s.reset();
  6575. sb.consume(sb.size());
  6576. sb.sputn(write_data, sizeof(write_data));
  6577. s.next_write_length(10);
  6578. called = false;
  6579. boost::asio::async_write_at(s, 1234, sb,
  6580. boost::asio::transfer_exactly(42),
  6581. bindns::bind(async_write_handler,
  6582. _1, _2, 42, &called));
  6583. ioc.restart();
  6584. ioc.run();
  6585. BOOST_ASIO_CHECK(called);
  6586. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
  6587. s.reset();
  6588. sb.consume(sb.size());
  6589. sb.sputn(write_data, sizeof(write_data));
  6590. called = false;
  6591. boost::asio::async_write_at(s, 0, sb, old_style_transfer_all,
  6592. bindns::bind(async_write_handler,
  6593. _1, _2, sizeof(write_data), &called));
  6594. ioc.restart();
  6595. ioc.run();
  6596. BOOST_ASIO_CHECK(called);
  6597. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6598. s.reset();
  6599. sb.consume(sb.size());
  6600. sb.sputn(write_data, sizeof(write_data));
  6601. called = false;
  6602. boost::asio::async_write_at(s, 1234, sb, old_style_transfer_all,
  6603. bindns::bind(async_write_handler,
  6604. _1, _2, sizeof(write_data), &called));
  6605. ioc.restart();
  6606. ioc.run();
  6607. BOOST_ASIO_CHECK(called);
  6608. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6609. s.reset();
  6610. sb.consume(sb.size());
  6611. sb.sputn(write_data, sizeof(write_data));
  6612. s.next_write_length(1);
  6613. called = false;
  6614. boost::asio::async_write_at(s, 0, sb, old_style_transfer_all,
  6615. bindns::bind(async_write_handler,
  6616. _1, _2, sizeof(write_data), &called));
  6617. ioc.restart();
  6618. ioc.run();
  6619. BOOST_ASIO_CHECK(called);
  6620. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6621. s.reset();
  6622. sb.consume(sb.size());
  6623. sb.sputn(write_data, sizeof(write_data));
  6624. s.next_write_length(1);
  6625. called = false;
  6626. boost::asio::async_write_at(s, 1234, sb, old_style_transfer_all,
  6627. bindns::bind(async_write_handler,
  6628. _1, _2, sizeof(write_data), &called));
  6629. ioc.restart();
  6630. ioc.run();
  6631. BOOST_ASIO_CHECK(called);
  6632. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6633. s.reset();
  6634. sb.consume(sb.size());
  6635. sb.sputn(write_data, sizeof(write_data));
  6636. s.next_write_length(10);
  6637. called = false;
  6638. boost::asio::async_write_at(s, 0, sb, old_style_transfer_all,
  6639. bindns::bind(async_write_handler,
  6640. _1, _2, sizeof(write_data), &called));
  6641. ioc.restart();
  6642. ioc.run();
  6643. BOOST_ASIO_CHECK(called);
  6644. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6645. s.reset();
  6646. sb.consume(sb.size());
  6647. sb.sputn(write_data, sizeof(write_data));
  6648. s.next_write_length(10);
  6649. called = false;
  6650. boost::asio::async_write_at(s, 1234, sb, old_style_transfer_all,
  6651. bindns::bind(async_write_handler,
  6652. _1, _2, sizeof(write_data), &called));
  6653. ioc.restart();
  6654. ioc.run();
  6655. BOOST_ASIO_CHECK(called);
  6656. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6657. s.reset();
  6658. sb.consume(sb.size());
  6659. sb.sputn(write_data, sizeof(write_data));
  6660. called = false;
  6661. boost::asio::async_write_at(s, 0, sb, short_transfer(),
  6662. bindns::bind(async_write_handler,
  6663. _1, _2, sizeof(write_data), &called));
  6664. ioc.restart();
  6665. ioc.run();
  6666. BOOST_ASIO_CHECK(called);
  6667. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6668. s.reset();
  6669. sb.consume(sb.size());
  6670. sb.sputn(write_data, sizeof(write_data));
  6671. called = false;
  6672. boost::asio::async_write_at(s, 1234, sb, short_transfer(),
  6673. bindns::bind(async_write_handler,
  6674. _1, _2, sizeof(write_data), &called));
  6675. ioc.restart();
  6676. ioc.run();
  6677. BOOST_ASIO_CHECK(called);
  6678. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6679. s.reset();
  6680. sb.consume(sb.size());
  6681. sb.sputn(write_data, sizeof(write_data));
  6682. s.next_write_length(1);
  6683. called = false;
  6684. boost::asio::async_write_at(s, 0, sb, short_transfer(),
  6685. bindns::bind(async_write_handler,
  6686. _1, _2, sizeof(write_data), &called));
  6687. ioc.restart();
  6688. ioc.run();
  6689. BOOST_ASIO_CHECK(called);
  6690. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6691. s.reset();
  6692. sb.consume(sb.size());
  6693. sb.sputn(write_data, sizeof(write_data));
  6694. s.next_write_length(1);
  6695. called = false;
  6696. boost::asio::async_write_at(s, 1234, sb, short_transfer(),
  6697. bindns::bind(async_write_handler,
  6698. _1, _2, sizeof(write_data), &called));
  6699. ioc.restart();
  6700. ioc.run();
  6701. BOOST_ASIO_CHECK(called);
  6702. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6703. s.reset();
  6704. sb.consume(sb.size());
  6705. sb.sputn(write_data, sizeof(write_data));
  6706. s.next_write_length(10);
  6707. called = false;
  6708. boost::asio::async_write_at(s, 0, sb, short_transfer(),
  6709. bindns::bind(async_write_handler,
  6710. _1, _2, sizeof(write_data), &called));
  6711. ioc.restart();
  6712. ioc.run();
  6713. BOOST_ASIO_CHECK(called);
  6714. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6715. s.reset();
  6716. sb.consume(sb.size());
  6717. sb.sputn(write_data, sizeof(write_data));
  6718. s.next_write_length(10);
  6719. called = false;
  6720. boost::asio::async_write_at(s, 1234, sb, short_transfer(),
  6721. bindns::bind(async_write_handler,
  6722. _1, _2, sizeof(write_data), &called));
  6723. ioc.restart();
  6724. ioc.run();
  6725. BOOST_ASIO_CHECK(called);
  6726. BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(write_data)));
  6727. s.reset();
  6728. sb.consume(sb.size());
  6729. sb.sputn(write_data, sizeof(write_data));
  6730. int i = boost::asio::async_write_at(s, 0, sb, short_transfer(),
  6731. archetypes::lazy_handler());
  6732. BOOST_ASIO_CHECK(i == 42);
  6733. ioc.restart();
  6734. ioc.run();
  6735. BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(write_data)));
  6736. }
  6737. BOOST_ASIO_TEST_SUITE
  6738. (
  6739. "write_at",
  6740. BOOST_ASIO_TEST_CASE(test_3_arg_const_buffer_write_at)
  6741. BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffer_write_at)
  6742. BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_write_at)
  6743. BOOST_ASIO_TEST_CASE(test_4_arg_nothrow_const_buffer_write_at)
  6744. BOOST_ASIO_TEST_CASE(test_4_arg_nothrow_mutable_buffer_write_at)
  6745. BOOST_ASIO_TEST_CASE(test_4_arg_nothrow_vector_buffers_write_at)
  6746. BOOST_ASIO_TEST_CASE(test_4_arg_const_buffer_write_at)
  6747. BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffer_write_at)
  6748. BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_write_at)
  6749. BOOST_ASIO_TEST_CASE(test_5_arg_const_buffer_write_at)
  6750. BOOST_ASIO_TEST_CASE(test_5_arg_mutable_buffer_write_at)
  6751. BOOST_ASIO_TEST_CASE(test_5_arg_vector_buffers_write_at)
  6752. BOOST_ASIO_TEST_CASE(test_4_arg_const_buffer_async_write_at)
  6753. BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffer_async_write_at)
  6754. BOOST_ASIO_TEST_CASE(test_4_arg_boost_array_buffers_async_write_at)
  6755. BOOST_ASIO_TEST_CASE(test_4_arg_std_array_buffers_async_write_at)
  6756. BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_async_write_at)
  6757. BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_async_write_at)
  6758. BOOST_ASIO_TEST_CASE(test_5_arg_const_buffer_async_write_at)
  6759. BOOST_ASIO_TEST_CASE(test_5_arg_mutable_buffer_async_write_at)
  6760. BOOST_ASIO_TEST_CASE(test_5_arg_boost_array_buffers_async_write_at)
  6761. BOOST_ASIO_TEST_CASE(test_5_arg_std_array_buffers_async_write_at)
  6762. BOOST_ASIO_TEST_CASE(test_5_arg_vector_buffers_async_write_at)
  6763. BOOST_ASIO_TEST_CASE(test_5_arg_streambuf_async_write_at)
  6764. )