123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215 |
- *luvref.txt* Nvim
- LUV REFERENCE MANUAL
- *luvref*
- This file documents the Lua bindings for the LibUV library which is used for
- Nvim's event-loop and is accessible from Lua via |vim.uv| (e.g., |uv.version()|
- is exposed as `vim.uv.version()`).
- For information about this manual, see |luv-credits|.
- For further examples, see https://github.com/luvit/luv/tree/master/examples.
- ==============================================================================
- INTRODUCTION *luv* *luv-intro* *uv*
- The luv (https://github.com/luvit/luv) project provides access to the
- multi-platform support library libuv (https://github.com/libuv/libuv) in Lua
- code. It was primarily developed for the luvit
- (https://github.com/luvit/luvit) project as the built-in `uv` module, but can
- be used in other Lua environments.
- More information about the core libuv library can be found at the original
- libuv documentation page (https://docs.libuv.org/).
- TCP Echo Server Example ~
- Here is a small example showing a TCP echo server:
- >lua
- local uv = vim.uv
- local server = uv.new_tcp()
- server:bind("127.0.0.1", 1337)
- server:listen(128, function (err)
- assert(not err, err)
- local client = uv.new_tcp()
- server:accept(client)
- client:read_start(function (err, chunk)
- assert(not err, err)
- if chunk then
- client:write(chunk)
- else
- client:shutdown()
- client:close()
- end
- end)
- end)
- print("TCP server listening at 127.0.0.1 port 1337")
- uv.run() -- an explicit run call is necessary outside of luvit
- <
- Module Layout ~
- The luv library contains a single Lua module referred to hereafter as `uv` for
- simplicity. This module consists mostly of functions with names corresponding
- to their original libuv versions. For example, the libuv function
- `uv_tcp_bind` has a luv version at |uv.tcp_bind()|. Currently, only two
- non-function fields exists: `uv.constants` and `uv.errno`, which are tables.
- Functions vs Methods ~
- In addition to having simple functions, luv provides an optional method-style
- API. For example, `uv.tcp_bind(server, host, port)` can alternatively be
- called as `server:bind(host, port)` . Note that the first argument `server`
- becomes the object and `tcp_` is removed from the function name. Method forms
- are documented below where they exist.
- Synchronous vs Asynchronous Functions ~
- Functions that accept a callback are asynchronous. These functions may
- immediately return results to the caller to indicate their initial status, but
- their final execution is deferred until at least the next libuv loop
- iteration. After completion, their callbacks are executed with any results
- passed to it.
- Functions that do not accept a callback are synchronous. These functions
- immediately return their results to the caller.
- Some (generally FS and DNS) functions can behave either synchronously or
- asynchronously. If a callback is provided to these functions, they behave
- asynchronously; if no callback is provided, they behave synchronously.
- Pseudo-Types ~
- Some unique types are defined. These are not actual types in Lua, but they are
- used here to facilitate documenting consistent behavior:
- - `fail`: an assertable `nil, string, string` tuple (see |luv-error-handling|)
- - `callable`: a `function`; or a `table` or `userdata` with a `__call`
- metamethod
- - `buffer`: a `string` or a sequential `table` of `string`s
- - `threadargs`: variable arguments (`...`) of type `nil`, `boolean`, `number`,
- `string`, or `userdata`; number of arguments limited to 9.
- ==============================================================================
- CONTENTS *luv-contents*
- This documentation is mostly a retelling of the libuv API documentation
- (https://docs.libuv.org/en/v1.x/api.html) within the context of luv's Lua API.
- Low-level implementation details and unexposed C functions and types are not
- documented here except for when they are relevant to behavior seen in the Lua
- module.
- - |luv-error-handling| — Error handling
- - |luv-version-checking| — Version checking
- - |uv_loop_t| — Event loop
- - |uv_req_t| — Base request
- - |uv_handle_t| — Base handle
- - |uv_timer_t| — Timer handle
- - |uv_prepare_t| — Prepare handle
- - |uv_check_t| — Check handle
- - |uv_idle_t| — Idle handle
- - |uv_async_t| — Async handle
- - |uv_poll_t| — Poll handle
- - |uv_signal_t| — Signal handle
- - |uv_process_t| — Process handle
- - |uv_stream_t| — Stream handle
- - |uv_tcp_t| — TCP handle
- - |uv_pipe_t| — Pipe handle
- - |uv_tty_t| — TTY handle
- - |uv_udp_t| — UDP handle
- - |uv_fs_event_t| — FS Event handle
- - |uv_fs_poll_t| — FS Poll handle
- - |luv-file-system-operations| — File system operations
- - |luv-thread-pool-work-scheduling| — Thread pool work scheduling
- - |luv-dns-utility-functions| — DNS utility functions
- - |luv-threading-and-synchronization-utilities| — Threading and
- synchronization utilities
- - |luv-miscellaneous-utilities| — Miscellaneous utilities
- - |luv-metrics-operations| — Metrics operations
- ==============================================================================
- ERROR HANDLING *luv-error-handling*
- In libuv, errors are negative numbered constants; however, while those errors
- are exposed through `uv.errno`, the functions used to handle them are not
- exposed to luv users. Instead, if an internal error is encountered, the luv
- function will return to the caller an assertable `nil, err, name` tuple.
- - `nil` idiomatically indicates failure
- - `err` is a string with the format `{name}: {message}`
- - `{name}` is the error name provided internally by `uv_err_name`
- - `{message}` is a human-readable message provided internally by
- `uv_strerror`
- - `name` is the same string used to construct `err`
- This tuple is referred to below as the `fail` pseudo-type.
- When a function is called successfully, it will return either a value that is
- relevant to the operation of the function, or the integer `0` to indicate
- success, or sometimes nothing at all. These cases are documented below.
- `uv.errno` *uv.errno*
- A table value which exposes error constants as a map, where the key is the
- error name (without the `UV_` prefix) and its value is a negative number.
- See Libuv's "Error constants" page for further details.
- (https://docs.libuv.org/en/v1.x/errors.html#error-constants)
- - `E2BIG`: argument list too long.
- - `EACCES`: permission denied.
- - `EADDRINUSE`: address already in use.
- - `EADDRNOTAVAIL`: address not available.
- - `EAFNOSUPPORT`: address family not supported.
- - `EAGAIN`: resource temporarily unavailable.
- - `EAI_ADDRFAMILY`: address family not supported.
- - `EAI_AGAIN`: temporary failure.
- - `EAI_BADFLAGS`: bad ai_flags value.
- - `EAI_BADHINTS`: invalid value for hints.
- - `EAI_CANCELED`: request canceled.
- - `EAI_FAIL`: permanent failure.
- - `EAI_FAMILY`: ai_family not supported.
- - `EAI_MEMORY`: out of memory.
- - `EAI_NODATA`: no address.
- - `EAI_NONAME`: unknown node or service.
- - `EAI_OVERFLOW`: argument buffer overflow.
- - `EAI_PROTOCOL`: resolved protocol is unknown.
- - `EAI_SERVICE`: service not available for socket type.
- - `EAI_SOCKTYPE`: socket type not supported.
- - `EALREADY`: connection already in progress.
- - `EBADF`: bad file descriptor.
- - `EBUSY`: resource busy or locked.
- - `ECANCELED`: operation canceled.
- - `ECHARSET`: invalid Unicode character.
- - `ECONNABORTED`: software caused connection abort.
- - `ECONNREFUSED`: connection refused.
- - `ECONNRESET`: connection reset by peer.
- - `EDESTADDRREQ`: destination address required.
- - `EEXIST`: file already exists.
- - `EFAULT`: bad address in system call argument.
- - `EFBIG`: file too large.
- - `EHOSTUNREACH`: host is unreachable.
- - `EINTR`: interrupted system call.
- - `EINVAL`: invalid argument.
- - `EIO`: i/o error.
- - `EISCONN`: socket is already connected.
- - `EISDIR`: illegal operation on a directory.
- - `ELOOP`: too many symbolic links encountered.
- - `EMFILE`: too many open files.
- - `EMSGSIZE`: message too long.
- - `ENAMETOOLONG`: name too long.
- - `ENETDOWN`: network is down.
- - `ENETUNREACH`: network is unreachable.
- - `ENFILE`: file table overflow.
- - `ENOBUFS`: no buffer space available.
- - `ENODEV`: no such device.
- - `ENOENT`: no such file or directory.
- - `ENOMEM`: not enough memory.
- - `ENONET`: machine is not on the network.
- - `ENOPROTOOPT`: protocol not available.
- - `ENOSPC`: no space left on device.
- - `ENOSYS`: function not implemented.
- - `ENOTCONN`: socket is not connected.
- - `ENOTDIR`: not a directory.
- - `ENOTEMPTY`: directory not empty.
- - `ENOTSOCK`: socket operation on non-socket.
- - `ENOTSUP`: operation not supported on socket.
- - `EOVERFLOW`: value too large for defined data type.
- - `EPERM`: operation not permitted.
- - `EPIPE`: broken pipe.
- - `EPROTO`: protocol error.
- - `EPROTONOSUPPORT`: protocol not supported.
- - `EPROTOTYPE`: protocol wrong type for socket.
- - `ERANGE`: result too large.
- - `EROFS`: read-only file system.
- - `ESHUTDOWN`: cannot send after transport endpoint shutdown.
- - `ESPIPE`: invalid seek.
- - `ESRCH`: no such process.
- - `ETIMEDOUT`: connection timed out.
- - `ETXTBSY`: text file is busy.
- - `EXDEV`: cross-device link not permitted.
- - `UNKNOWN`: unknown error.
- - `EOF`: end of file.
- - `ENXIO`: no such device or address.
- - `EMLINK`: too many links.
- - `ENOTTY`: inappropriate ioctl for device.
- - `EFTYPE`: inappropriate file type or format.
- - `EILSEQ`: illegal byte sequence.
- - `ESOCKTNOSUPPORT`: socket type not supported.
- ==============================================================================
- VERSION CHECKING *luv-version-checking*
- uv.version() *uv.version()*
- Returns the libuv version packed into a single integer. 8 bits
- are used for each component, with the patch number stored in
- the 8 least significant bits. For example, this would be
- 0x010203 in libuv 1.2.3.
- Returns: `integer`
- uv.version_string() *uv.version_string()*
- Returns the libuv version number as a string. For example,
- this would be "1.2.3" in libuv 1.2.3. For non-release
- versions, the version suffix is included.
- Returns: `string`
- ==============================================================================
- `uv_loop_t` — Event loop *luv-event-loop* *uv_loop_t*
- The event loop is the central part of libuv's functionality. It takes care of
- polling for I/O and scheduling callbacks to be run based on different sources
- of events.
- In luv, there is an implicit uv loop for every Lua state that loads the
- library. You can use this library in an multi-threaded environment as long as
- each thread has it's own Lua state with its corresponding own uv loop. This
- loop is not directly exposed to users in the Lua module.
- uv.loop_close() *uv.loop_close()*
- Closes all internal loop resources. In normal execution, the
- loop will automatically be closed when it is garbage collected
- by Lua, so it is not necessary to explicitly call
- `loop_close()`. Call this function only after the loop has
- finished executing and all open handles and requests have been
- closed, or it will return `EBUSY`.
- Returns: `0` or `fail`
- uv.run([{mode}]) *uv.run()*
- Parameters:
- - `mode`: `string` or `nil` (default: `"default"`)
- This function runs the event loop. It will act differently
- depending on the specified mode:
- - `"default"`: Runs the event loop until there are no more
- active and referenced handles or requests. Returns `true`
- if |uv.stop()| was called and there are still active
- handles or requests. Returns `false` in all other cases.
- - `"once"`: Poll for I/O once. Note that this function
- blocks if there are no pending callbacks. Returns `false`
- when done (no active handles or requests left), or `true`
- if more callbacks are expected (meaning you should run the
- event loop again sometime in the future).
- - `"nowait"`: Poll for I/O once but don't block if there are
- no pending callbacks. Returns `false` if done (no active
- handles or requests left), or `true` if more callbacks are
- expected (meaning you should run the event loop again
- sometime in the future).
- Returns: `boolean` or `fail`
- Note: Luvit will implicitly call `uv.run()` after loading user
- code, but if you use the luv bindings directly, you need to
- call this after registering your initial set of event
- callbacks to start the event loop.
- uv.loop_configure({option}, {...}) *uv.loop_configure()*
- Parameters:
- - `option`: `string`
- - `...`: depends on `option`, see below
- Set additional loop options. You should normally call this
- before the first call to uv_run() unless mentioned otherwise.
- Supported options:
- - `"block_signal"`: Block a signal when polling for new
- events. The second argument to loop_configure() is the
- signal name (as a lowercase string) or the signal number.
- This operation is currently only implemented for
- `"sigprof"` signals, to suppress unnecessary wakeups when
- using a sampling profiler. Requesting other signals will
- fail with `EINVAL`.
- - `"metrics_idle_time"`: Accumulate the amount of idle time
- the event loop spends in the event provider. This option
- is necessary to use `metrics_idle_time()`.
- An example of a valid call to this function is:
- >lua
- uv.loop_configure("block_signal", "sigprof")
- <
- Returns: `0` or `fail`
- Note: Be prepared to handle the `ENOSYS` error; it means the
- loop option is not supported by the platform.
- uv.loop_mode() *uv.loop_mode()*
- If the loop is running, returns a string indicating the mode
- in use. If the loop is not running, `nil` is returned instead.
- Returns: `string` or `nil`
- uv.loop_alive() *uv.loop_alive()*
- Returns `true` if there are referenced active handles, active
- requests, or closing handles in the loop; otherwise, `false`.
- Returns: `boolean` or `fail`
- uv.stop() *uv.stop()*
- Stop the event loop, causing |uv.run()| to end as soon as
- possible. This will happen not sooner than the next loop
- iteration. If this function was called before blocking for
- I/O, the loop won't block for I/O on this iteration.
- Returns: Nothing.
- uv.backend_fd() *uv.backend_fd()*
- Get backend file descriptor. Only kqueue, epoll, and event
- ports are supported.
- This can be used in conjunction with `uv.run("nowait")` to
- poll in one thread and run the event loop's callbacks in
- another
- Returns: `integer` or `nil`
- Note: Embedding a kqueue fd in another kqueue pollset doesn't
- work on all platforms. It's not an error to add the fd but it
- never generates events.
- uv.backend_timeout() *uv.backend_timeout()*
- Get the poll timeout. The return value is in milliseconds, or
- -1 for no timeout.
- Returns: `integer`
- uv.now() *uv.now()*
- Returns the current timestamp in milliseconds. The timestamp
- is cached at the start of the event loop tick, see
- |uv.update_time()| for details and rationale.
- The timestamp increases monotonically from some arbitrary
- point in time. Don't make assumptions about the starting
- point, you will only get disappointed.
- Returns: `integer`
- Note: Use |uv.hrtime()| if you need sub-millisecond
- granularity.
- uv.update_time() *uv.update_time()*
- Update the event loop's concept of "now". Libuv caches the
- current time at the start of the event loop tick in order to
- reduce the number of time-related system calls.
- You won't normally need to call this function unless you have
- callbacks that block the event loop for longer periods of
- time, where "longer" is somewhat subjective but probably on
- the order of a millisecond or more.
- Returns: Nothing.
- uv.walk({callback}) *uv.walk()*
- Parameters:
- - `callback`: `callable`
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- Walk the list of handles: `callback` will be executed with
- each handle.
- Returns: Nothing.
- >lua
- -- Example usage of uv.walk to close all handles that
- -- aren't already closing.
- uv.walk(function (handle)
- if not handle:is_closing() then
- handle:close()
- end
- end)
- <
- ==============================================================================
- `uv_req_t` — Base request *luv-base-request* *uv_req_t*
- `uv_req_t` is the base type for all libuv request types.
- uv.cancel({req}) *uv.cancel()*
- > method form `req:cancel()`
- Parameters:
- - `req`: `userdata` for sub-type of |uv_req_t|
- Cancel a pending request. Fails if the request is executing or
- has finished executing. Only cancellation of |uv_fs_t|,
- `uv_getaddrinfo_t`, `uv_getnameinfo_t` and `uv_work_t`
- requests is currently supported.
- Returns: `0` or `fail`
- uv.req_get_type({req}) *uv.req_get_type()*
- > method form `req:get_type()`
- Parameters:
- - `req`: `userdata` for sub-type of |uv_req_t|
- Returns the name of the struct for a given request (e.g.
- `"fs"` for |uv_fs_t|) and the libuv enum integer for the
- request's type (`uv_req_type`).
- Returns: `string, integer`
- ==============================================================================
- `uv_handle_t` — Base handle *luv-base-handle* *uv_handle_t*
- `uv_handle_t` is the base type for all libuv handle types. All API functions
- defined here work with any handle type.
- uv.is_active({handle}) *uv.is_active()*
- > method form `handle:is_active()`
- Parameters:
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- Returns `true` if the handle is active, `false` if it's
- inactive. What "active” means depends on the type of handle:
- - A |uv_async_t| handle is always active and cannot be
- deactivated, except by closing it with |uv.close()|.
- - A |uv_pipe_t|, |uv_tcp_t|, |uv_udp_t|, etc.
- handle - basically any handle that deals with I/O - is
- active when it is doing something that involves I/O, like
- reading, writing, connecting, accepting new connections,
- etc.
- - A |uv_check_t|, |uv_idle_t|, |uv_timer_t|,
- etc. handle is active when it has been started with a call
- to |uv.check_start()|, |uv.idle_start()|,
- |uv.timer_start()| etc. until it has been stopped with a
- call to its respective stop function.
- Returns: `boolean` or `fail`
- uv.is_closing({handle}) *uv.is_closing()*
- > method form `handle:is_closing()`
- Parameters:
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- Returns `true` if the handle is closing or closed, `false`
- otherwise.
- Returns: `boolean` or `fail`
- Note: This function should only be used between the
- initialization of the handle and the arrival of the close
- callback.
- uv.close({handle} [, {callback}]) *uv.close()*
- > method form `handle:close([callback])`
- Parameters:
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- - `callback`: `callable` or `nil`
- Request handle to be closed. `callback` will be called
- asynchronously after this call. This MUST be called on each
- handle before memory is released.
- Handles that wrap file descriptors are closed immediately but
- `callback` will still be deferred to the next iteration of the
- event loop. It gives you a chance to free up any resources
- associated with the handle.
- In-progress requests, like `uv_connect_t` or `uv_write_t`, are
- cancelled and have their callbacks called asynchronously with
- `ECANCELED`.
- Returns: Nothing.
- uv.ref({handle}) *uv.ref()*
- > method form `handle:ref()`
- Parameters:
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- Reference the given handle. References are idempotent, that
- is, if a handle is already referenced calling this function
- again will have no effect.
- Returns: Nothing.
- See |luv-reference-counting|.
- uv.unref({handle}) *uv.unref()*
- > method form `handle:unref()`
- Parameters:
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- Un-reference the given handle. References are idempotent, that
- is, if a handle is not referenced calling this function again
- will have no effect.
- Returns: Nothing.
- See |luv-reference-counting|.
- uv.has_ref({handle}) *uv.has_ref()*
- > method form `handle:has_ref()`
- Parameters:
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- Returns `true` if the handle referenced, `false` if not.
- Returns: `boolean` or `fail`
- See |luv-reference-counting|.
- uv.send_buffer_size({handle} [, {size}]) *uv.send_buffer_size()*
- > method form `handle:send_buffer_size([size])`
- Parameters:
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- - `size`: `integer` or `nil` (default: `0`)
- Gets or sets the size of the send buffer that the operating
- system uses for the socket.
- If `size` is omitted (or `0`), this will return the current
- send buffer size; otherwise, this will use `size` to set the
- new send buffer size.
- This function works for TCP, pipe and UDP handles on Unix and
- for TCP and UDP handles on Windows.
- Returns:
- - `integer` or `fail` (if `size` is `nil` or `0`)
- - `0` or `fail` (if `size` is not `nil` and not `0`)
- Note: Linux will set double the size and return double the
- size of the original set value.
- uv.recv_buffer_size({handle} [, {size}]) *uv.recv_buffer_size()*
- > method form `handle:recv_buffer_size([size])`
- Parameters:
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- - `size`: `integer` or `nil` (default: `0`)
- Gets or sets the size of the receive buffer that the operating
- system uses for the socket.
- If `size` is omitted (or `0`), this will return the current
- send buffer size; otherwise, this will use `size` to set the
- new send buffer size.
- This function works for TCP, pipe and UDP handles on Unix and
- for TCP and UDP handles on Windows.
- Returns:
- - `integer` or `fail` (if `size` is `nil` or `0`)
- - `0` or `fail` (if `size` is not `nil` and not `0`)
- Note: Linux will set double the size and return double the
- size of the original set value.
- uv.fileno({handle}) *uv.fileno()*
- > method form `handle:fileno()`
- Parameters:
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- Gets the platform dependent file descriptor equivalent.
- The following handles are supported: TCP, pipes, TTY, UDP and
- poll. Passing any other handle type will fail with `EINVAL`.
- If a handle doesn't have an attached file descriptor yet or
- the handle itself has been closed, this function will return
- `EBADF`.
- Returns: `integer` or `fail`
- WARNING: Be very careful when using this function. libuv
- assumes it's in control of the file descriptor so any change
- to it may lead to malfunction.
- uv.handle_get_type({handle}) *uv.handle_get_type()*
- > method form `handle:get_type()`
- Parameters:
- - `handle`: `userdata` for sub-type of |uv_handle_t|
- Returns the name of the struct for a given handle (e.g.
- `"pipe"` for |uv_pipe_t|) and the libuv enum integer for the
- handle's type (`uv_handle_type`).
- Returns: `string, integer`
- ==============================================================================
- REFERENCE COUNTING *luv-reference-counting*
- The libuv event loop (if run in the default mode) will run until there are no
- active and referenced handles left. The user can force the loop to exit early
- by unreferencing handles which are active, for example by calling |uv.unref()|
- after calling |uv.timer_start()|.
- A handle can be referenced or unreferenced, the refcounting scheme doesn't use
- a counter, so both operations are idempotent.
- All handles are referenced when active by default, see |uv.is_active()| for a
- more detailed explanation on what being active involves.
- ==============================================================================
- `uv_timer_t` — Timer handle *luv-timer-handle* *uv_timer_t*
- > |uv_handle_t| functions also apply.
- Timer handles are used to schedule callbacks to be called in the future.
- uv.new_timer() *uv.new_timer()*
- Creates and initializes a new |uv_timer_t|. Returns the Lua
- userdata wrapping it.
- Returns: `uv_timer_t userdata` or `fail`
- >lua
- -- Creating a simple setTimeout wrapper
- local function setTimeout(timeout, callback)
- local timer = uv.new_timer()
- timer:start(timeout, 0, function ()
- timer:stop()
- timer:close()
- callback()
- end)
- return timer
- end
- -- Creating a simple setInterval wrapper
- local function setInterval(interval, callback)
- local timer = uv.new_timer()
- timer:start(interval, interval, function ()
- callback()
- end)
- return timer
- end
- -- And clearInterval
- local function clearInterval(timer)
- timer:stop()
- timer:close()
- end
- <
- uv.timer_start({timer}, {timeout}, {repeat}, {callback}) *uv.timer_start()*
- > method form `timer:start(timeout, repeat, callback)`
- Parameters:
- - `timer`: `uv_timer_t userdata`
- - `timeout`: `integer`
- - `repeat`: `integer`
- - `callback`: `callable`
- Start the timer. `timeout` and `repeat` are in milliseconds.
- If `timeout` is zero, the callback fires on the next event
- loop iteration. If `repeat` is non-zero, the callback fires
- first after `timeout` milliseconds and then repeatedly after
- `repeat` milliseconds.
- Returns: `0` or `fail`
- uv.timer_stop({timer}) *uv.timer_stop()*
- > method form `timer:stop()`
- Parameters:
- - `timer`: `uv_timer_t userdata`
- Stop the timer, the callback will not be called anymore.
- Returns: `0` or `fail`
- uv.timer_again({timer}) *uv.timer_again()*
- > method form `timer:again()`
- Parameters:
- - `timer`: `uv_timer_t userdata`
- Stop the timer, and if it is repeating restart it using the
- repeat value as the timeout. If the timer has never been
- started before it raises `EINVAL`.
- Returns: `0` or `fail`
- uv.timer_set_repeat({timer}, {repeat}) *uv.timer_set_repeat()*
- > method form `timer:set_repeat(repeat)`
- Parameters:
- - `timer`: `uv_timer_t userdata`
- - `repeat`: `integer`
- Set the repeat interval value in milliseconds. The timer will
- be scheduled to run on the given interval, regardless of the
- callback execution duration, and will follow normal timer
- semantics in the case of a time-slice overrun.
- For example, if a 50 ms repeating timer first runs for 17 ms,
- it will be scheduled to run again 33 ms later. If other tasks
- consume more than the 33 ms following the first timer
- callback, then the callback will run as soon as possible.
- Returns: Nothing.
- uv.timer_get_repeat({timer}) *uv.timer_get_repeat()*
- > method form `timer:get_repeat()`
- Parameters:
- - `timer`: `uv_timer_t userdata`
- Get the timer repeat value.
- Returns: `integer`
- uv.timer_get_due_in({timer}) *uv.timer_get_due_in()*
- > method form `timer:get_due_in()`
- Parameters:
- - `timer`: `uv_timer_t userdata`
- Get the timer due value or 0 if it has expired. The time is
- relative to |uv.now()|.
- Returns: `integer`
- Note: New in libuv version 1.40.0.
- ==============================================================================
- `uv_prepare_t` — Prepare handle *luv-prepare-handle* *uv_prepare_t*
- > |uv_handle_t| functions also apply.
- Prepare handles will run the given callback once per loop iteration, right
- before polling for I/O.
- >lua
- local prepare = uv.new_prepare()
- prepare:start(function()
- print("Before I/O polling")
- end)
- <
- uv.new_prepare() *uv.new_prepare()*
- Creates and initializes a new |uv_prepare_t|. Returns the Lua
- userdata wrapping it.
- Returns: `uv_prepare_t userdata`
- uv.prepare_start({prepare}, {callback}) *uv.prepare_start()*
- > method form `prepare:start(callback)`
- Parameters:
- - `prepare`: `uv_prepare_t userdata`
- - `callback`: `callable`
- Start the handle with the given callback.
- Returns: `0` or `fail`
- uv.prepare_stop({prepare}) *uv.prepare_stop()*
- > method form `prepare:stop()`
- Parameters:
- - `prepare`: `uv_prepare_t userdata`
- Stop the handle, the callback will no longer be called.
- Returns: `0` or `fail`
- ==============================================================================
- `uv_check_t` — Check handle *luv-check-handle* *uv_check_t*
- > |uv_handle_t| functions also apply.
- Check handles will run the given callback once per loop iteration, right after
- polling for I/O.
- >lua
- local check = uv.new_check()
- check:start(function()
- print("After I/O polling")
- end)
- <
- uv.new_check() *uv.new_check()*
- Creates and initializes a new |uv_check_t|. Returns the Lua
- userdata wrapping it.
- Returns: `uv_check_t userdata`
- uv.check_start({check}, {callback}) *uv.check_start()*
- > method form `check:start(callback)`
- Parameters:
- - `check`: `uv_check_t userdata`
- - `callback`: `callable`
- Start the handle with the given callback.
- Returns: `0` or `fail`
- uv.check_stop({check}) *uv.check_stop()*
- > method form `check:stop()`
- Parameters:
- - `check`: `uv_check_t userdata`
- Stop the handle, the callback will no longer be called.
- Returns: `0` or `fail`
- ==============================================================================
- `uv_idle_t` — Idle handle *luv-idle-handle* *uv_idle_t*
- > |uv_handle_t| functions also apply.
- Idle handles will run the given callback once per loop iteration, right before
- the |uv_prepare_t| handles.
- Note: The notable difference with prepare handles is that when there are
- active idle handles, the loop will perform a zero timeout poll instead of
- blocking for I/O.
- WARNING: Despite the name, idle handles will get their callbacks called on
- every loop iteration, not when the loop is actually "idle".
- >lua
- local idle = uv.new_idle()
- idle:start(function()
- print("Before I/O polling, no blocking")
- end)
- <
- uv.new_idle() *uv.new_idle()*
- Creates and initializes a new |uv_idle_t|. Returns the Lua
- userdata wrapping it.
- Returns: `uv_idle_t userdata`
- uv.idle_start({idle}, {callback}) *uv.idle_start()*
- > method form `idle:start(callback)`
- Parameters:
- - `idle`: `uv_idle_t userdata`
- - `callback`: `callable`
- Start the handle with the given callback.
- Returns: `0` or `fail`
- uv.idle_stop({check}) *uv.idle_stop()*
- > method form `idle:stop()`
- Parameters:
- - `idle`: `uv_idle_t userdata`
- Stop the handle, the callback will no longer be called.
- Returns: `0` or `fail`
- ==============================================================================
- `uv_async_t` — Async handle *luv-async-handle* *uv_async_t*
- > |uv_handle_t| functions also apply.
- Async handles allow the user to "wakeup" the event loop and get a callback
- called from another thread.
- >lua
- local async
- async = uv.new_async(function()
- print("async operation ran")
- async:close()
- end)
- async:send()
- <
- uv.new_async({callback}) *uv.new_async()*
- Parameters:
- - `callback`: `callable`
- - `...`: `threadargs` passed to/from
- `uv.async_send(async, ...)`
- Creates and initializes a new |uv_async_t|. Returns the Lua
- userdata wrapping it.
- Returns: `uv_async_t userdata` or `fail`
- Note: Unlike other handle initialization functions, this
- immediately starts the handle.
- uv.async_send({async}, {...}) *uv.async_send()*
- > method form `async:send(...)`
- Parameters:
- - `async`: `uv_async_t userdata`
- - `...`: `threadargs`
- Wakeup the event loop and call the async handle's callback.
- Returns: `0` or `fail`
- Note: It's safe to call this function from any thread. The
- callback will be called on the loop thread.
- WARNING: libuv will coalesce calls to `uv.async_send(async)`,
- that is, not every call to it will yield an execution of the
- callback. For example: if `uv.async_send()` is called 5 times
- in a row before the callback is called, the callback will only
- be called once. If `uv.async_send()` is called again after the
- callback was called, it will be called again.
- ==============================================================================
- `uv_poll_t` — Poll handle *luv-poll-handle* *uv_poll_t*
- > |uv_handle_t| functions also apply.
- Poll handles are used to watch file descriptors for readability and
- writability, similar to the purpose of poll(2)
- (https://linux.die.net/man/2/poll).
- The purpose of poll handles is to enable integrating external libraries that
- rely on the event loop to signal it about the socket status changes, like
- c-ares or libssh2. Using `uv_poll_t` for any other purpose is not recommended;
- |uv_tcp_t|, |uv_udp_t|, etc. provide an implementation that is faster and more
- scalable than what can be achieved with `uv_poll_t`, especially on Windows.
- It is possible that poll handles occasionally signal that a file descriptor is
- readable or writable even when it isn't. The user should therefore always be
- prepared to handle EAGAIN or equivalent when it attempts to read from or write
- to the fd.
- It is not okay to have multiple active poll handles for the same socket, this
- can cause libuv to busyloop or otherwise malfunction.
- The user should not close a file descriptor while it is being polled by an
- active poll handle. This can cause the handle to report an error, but it might
- also start polling another socket. However the fd can be safely closed
- immediately after a call to |uv.poll_stop()| or |uv.close()|.
- Note: On windows only sockets can be polled with poll handles. On Unix any
- file descriptor that would be accepted by poll(2) can be used.
- uv.new_poll({fd}) *uv.new_poll()*
- Parameters:
- - `fd`: `integer`
- Initialize the handle using a file descriptor.
- The file descriptor is set to non-blocking mode.
- Returns: `uv_poll_t userdata` or `fail`
- uv.new_socket_poll({fd}) *uv.new_socket_poll()*
- Parameters:
- - `fd`: `integer`
- Initialize the handle using a socket descriptor. On Unix this
- is identical to |uv.new_poll()|. On windows it takes a SOCKET
- handle.
- The socket is set to non-blocking mode.
- Returns: `uv_poll_t userdata` or `fail`
- uv.poll_start({poll}, {events}, {callback}) *uv.poll_start()*
- > method form `poll:start(events, callback)`
- Parameters:
- - `poll`: `uv_poll_t userdata`
- - `events`: `string` or `nil` (default: `"rw"`)
- - `callback`: `callable`
- - `err`: `nil` or `string`
- - `events`: `string` or `nil`
- Starts polling the file descriptor. `events` are: `"r"`,
- `"w"`, `"rw"`, `"d"`, `"rd"`, `"wd"`, `"rwd"`, `"p"`, `"rp"`,
- `"wp"`, `"rwp"`, `"dp"`, `"rdp"`, `"wdp"`, or `"rwdp"` where
- `r` is `READABLE`, `w` is `WRITABLE`, `d` is `DISCONNECT`, and
- `p` is `PRIORITIZED`. As soon as an event is detected the
- callback will be called with status set to 0, and the detected
- events set on the events field.
- The user should not close the socket while the handle is
- active. If the user does that anyway, the callback may be
- called reporting an error status, but this is not guaranteed.
- Returns: `0` or `fail`
- Note Calling `uv.poll_start()` on a handle that is already
- active is fine. Doing so will update the events mask that is
- being watched for.
- uv.poll_stop({poll}) *uv.poll_stop()*
- > method form `poll:stop()`
- Parameters:
- - `poll`: `uv_poll_t userdata`
- Stop polling the file descriptor, the callback will no longer
- be called.
- Returns: `0` or `fail`
- ==============================================================================
- `uv_signal_t` — Signal handle *luv-signal-handle* *uv_signal_t*
- > |uv_handle_t| functions also apply.
- Signal handles implement Unix style signal handling on a per-event loop bases.
- Windows Notes:
- Reception of some signals is emulated on Windows:
- - SIGINT is normally delivered when the user presses CTRL+C. However, like
- on Unix, it is not generated when terminal raw mode is enabled.
- - SIGBREAK is delivered when the user pressed CTRL + BREAK.
- - SIGHUP is generated when the user closes the console window. On SIGHUP the
- program is given approximately 10 seconds to perform cleanup. After that
- Windows will unconditionally terminate it.
- - SIGWINCH is raised whenever libuv detects that the console has been
- resized. SIGWINCH is emulated by libuv when the program uses a uv_tty_t
- handle to write to the console. SIGWINCH may not always be delivered in a
- timely manner; libuv will only detect size changes when the cursor is
- being moved. When a readable |uv_tty_t| handle is used in raw mode,
- resizing the console buffer will also trigger a SIGWINCH signal.
- - Watchers for other signals can be successfully created, but these signals
- are never received. These signals are: SIGILL, SIGABRT, SIGFPE, SIGSEGV,
- SIGTERM and SIGKILL.
- - Calls to raise() or abort() to programmatically raise a signal are not
- detected by libuv; these will not trigger a signal watcher.
- Unix Notes:
- - SIGKILL and SIGSTOP are impossible to catch.
- - Handling SIGBUS, SIGFPE, SIGILL or SIGSEGV via libuv results into
- undefined behavior.
- - SIGABRT will not be caught by libuv if generated by abort(), e.g. through
- assert().
- - On Linux SIGRT0 and SIGRT1 (signals 32 and 33) are used by the NPTL
- pthreads library to manage threads. Installing watchers for those signals
- will lead to unpredictable behavior and is strongly discouraged. Future
- versions of libuv may simply reject them.
- >lua
- -- Create a new signal handler
- local signal = uv.new_signal()
- -- Define a handler function
- uv.signal_start(signal, "sigint", function(signal)
- print("got " .. signal .. ", shutting down")
- os.exit(1)
- end)
- <
- uv.new_signal() *uv.new_signal()*
- Creates and initializes a new |uv_signal_t|. Returns the Lua
- userdata wrapping it.
- Returns: `uv_signal_t userdata` or `fail`
- uv.signal_start({signal}, {signum}, {callback}) *uv.signal_start()*
- > method form `signal:start(signum, callback)`
- Parameters:
- - `signal`: `uv_signal_t userdata`
- - `signum`: `integer` or `string`
- - `callback`: `callable`
- - `signum`: `string`
- Start the handle with the given callback, watching for the
- given signal.
- Returns: `0` or `fail`
- *uv.signal_start_oneshot()*
- uv.signal_start_oneshot({signal}, {signum}, {callback})
- > method form `signal:start_oneshot(signum, callback)`
- Parameters:
- - `signal`: `uv_signal_t userdata`
- - `signum`: `integer` or `string`
- - `callback`: `callable`
- - `signum`: `string`
- Same functionality as |uv.signal_start()| but the signal
- handler is reset the moment the signal is received.
- Returns: `0` or `fail`
- uv.signal_stop({signal}) *uv.signal_stop()*
- > method form `signal:stop()`
- Parameters:
- - `signal`: `uv_signal_t userdata`
- Stop the handle, the callback will no longer be called.
- Returns: `0` or `fail`
- ==============================================================================
- `uv_process_t` — Process handle *luv-process-handle* *uv_process_t*
- > |uv_handle_t| functions also apply.
- Process handles will spawn a new process and allow the user to control it and
- establish communication channels with it using streams.
- uv.disable_stdio_inheritance() *uv.disable_stdio_inheritance()*
- Disables inheritance for file descriptors / handles that this
- process inherited from its parent. The effect is that child
- processes spawned by this process don't accidentally inherit
- these handles.
- It is recommended to call this function as early in your
- program as possible, before the inherited file descriptors can
- be closed or duplicated.
- Returns: Nothing.
- Note: This function works on a best-effort basis: there is no
- guarantee that libuv can discover all file descriptors that
- were inherited. In general it does a better job on Windows
- than it does on Unix.
- uv.spawn({path}, {options}, {on_exit}) *uv.spawn()*
- Parameters:
- - `path`: `string`
- - `options`: `table` (see below)
- - `on_exit`: `callable`
- - `code`: `integer`
- - `signal`: `integer`
- Initializes the process handle and starts the process. If the
- process is successfully spawned, this function will return the
- handle and pid of the child process.
- Possible reasons for failing to spawn would include (but not
- be limited to) the file to execute not existing, not having
- permissions to use the setuid or setgid specified, or not
- having enough memory to allocate for the new process.
- >lua
- local stdin = uv.new_pipe()
- local stdout = uv.new_pipe()
- local stderr = uv.new_pipe()
- print("stdin", stdin)
- print("stdout", stdout)
- print("stderr", stderr)
- local handle, pid = uv.spawn("cat", {
- stdio = {stdin, stdout, stderr}
- }, function(code, signal) -- on exit
- print("exit code", code)
- print("exit signal", signal)
- end)
- print("process opened", handle, pid)
- uv.read_start(stdout, function(err, data)
- assert(not err, err)
- if data then
- print("stdout chunk", stdout, data)
- else
- print("stdout end", stdout)
- end
- end)
- uv.read_start(stderr, function(err, data)
- assert(not err, err)
- if data then
- print("stderr chunk", stderr, data)
- else
- print("stderr end", stderr)
- end
- end)
- uv.write(stdin, "Hello World")
- uv.shutdown(stdin, function()
- print("stdin shutdown", stdin)
- uv.close(handle, function()
- print("process closed", handle, pid)
- end)
- end)
- <
- *uv.spawn-options*
- The `options` table accepts the following fields:
- - `options.args` - Command line arguments as a list of
- strings. The first string should not be the path to the
- program, since that is already provided via `path`. On
- Windows, this uses CreateProcess which concatenates the
- arguments into a string. This can cause some strange
- errors (see `options.verbatim` below for Windows).
- - `options.stdio` - Set the file descriptors that will be
- made available to the child process. The convention is
- that the first entries are stdin, stdout, and stderr.
- (Note: On Windows, file descriptors after the third are
- available to the child process only if the child processes
- uses the MSVCRT runtime.)
- - `options.env` - Set environment variables for the new
- process.
- - `options.cwd` - Set the current working directory for the
- sub-process.
- - `options.uid` - Set the child process' user id.
- - `options.gid` - Set the child process' group id.
- - `options.verbatim` - If true, do not wrap any arguments in
- quotes, or perform any other escaping, when converting the
- argument list into a command line string. This option is
- only meaningful on Windows systems. On Unix it is silently
- ignored.
- - `options.detached` - If true, spawn the child process in a
- detached state - this will make it a process group leader,
- and will effectively enable the child to keep running
- after the parent exits. Note that the child process will
- still keep the parent's event loop alive unless the parent
- process calls |uv.unref()| on the child's process handle.
- - `options.hide` - If true, hide the subprocess console
- window that would normally be created. This option is only
- meaningful on Windows systems. On Unix it is silently
- ignored.
- The `options.stdio` entries can take many shapes.
- - If they are numbers, then the child process inherits that
- same zero-indexed fd from the parent process.
- - If |uv_stream_t| handles are passed in, those are used as
- a read-write pipe or inherited stream depending if the
- stream has a valid fd.
- - Including `nil` placeholders means to ignore that fd in
- the child process.
- When the child process exits, `on_exit` is called with an exit
- code and signal.
- Returns: `uv_process_t userdata`, `integer`
- uv.process_kill({process}, {signum}) *uv.process_kill()*
- > method form `process:kill(signum)`
- Parameters:
- - `process`: `uv_process_t userdata`
- - `signum`: `integer` or `string` or `nil` (default: `sigterm`)
- Sends the specified signal to the given process handle. Check
- the documentation on |uv_signal_t| for signal support,
- specially on Windows.
- Returns: `0` or `fail`
- uv.kill({pid}, {signum}) *uv.kill()*
- Parameters:
- - `pid`: `integer`
- - `signum`: `integer` or `string` or `nil` (default: `sigterm`)
- Sends the specified signal to the given PID. Check the
- documentation on |uv_signal_t| for signal support, specially
- on Windows.
- Returns: `0` or `fail`
- uv.process_get_pid({process}) *uv.process_get_pid()*
- > method form `process:get_pid()`
- Parameters:
- - `process`: `uv_process_t userdata`
- Returns the handle's pid.
- Returns: `integer`
- ==============================================================================
- `uv_stream_t` — Stream handle *luv-stream-handle* *uv_stream_t*
- > |uv_handle_t| functions also apply.
- Stream handles provide an abstraction of a duplex communication channel.
- `uv_stream_t` is an abstract type, libuv provides 3 stream implementations
- in the form of |uv_tcp_t|, |uv_pipe_t| and |uv_tty_t|.
- uv.shutdown({stream} [, {callback}]) *uv.shutdown()*
- > method form `stream:shutdown([callback])`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- - `callback`: `callable` or `nil`
- - `err`: `nil` or `string`
- Shutdown the outgoing (write) side of a duplex stream. It
- waits for pending write requests to complete. The callback is
- called after shutdown is complete.
- Returns: `uv_shutdown_t userdata` or `fail`
- uv.listen({stream}, {backlog}, {callback}) *uv.listen()*
- > method form `stream:listen(backlog, callback)`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- - `backlog`: `integer`
- - `callback`: `callable`
- - `err`: `nil` or `string`
- Start listening for incoming connections. `backlog` indicates
- the number of connections the kernel might queue, same as
- `listen(2)`. When a new incoming connection is received the
- callback is called.
- Returns: `0` or `fail`
- uv.accept({stream}, {client_stream}) *uv.accept()*
- > method form `stream:accept(client_stream)`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- - `client_stream`: `userdata` for sub-type of |uv_stream_t|
- This call is used in conjunction with |uv.listen()| to accept
- incoming connections. Call this function after receiving a
- callback to accept the connection.
- When the connection callback is called it is guaranteed that
- this function will complete successfully the first time. If
- you attempt to use it more than once, it may fail. It is
- suggested to only call this function once per connection call.
- Returns: `0` or `fail`
- >lua
- server:listen(128, function (err)
- local client = uv.new_tcp()
- server:accept(client)
- end)
- <
- uv.read_start({stream}, {callback}) *uv.read_start()*
- > method form `stream:read_start(callback)`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- - `callback`: `callable`
- - `err`: `nil` or `string`
- - `data`: `string` or `nil`
- Read data from an incoming stream. The callback will be made
- several times until there is no more data to read or
- |uv.read_stop()| is called. When we've reached EOF, `data`
- will be `nil`.
- Returns: `0` or `fail`
- >lua
- stream:read_start(function (err, chunk)
- if err then
- -- handle read error
- elseif chunk then
- -- handle data
- else
- -- handle disconnect
- end
- end)
- <
- uv.read_stop({stream}) *uv.read_stop()*
- > method form `stream:read_stop()`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- Stop reading data from the stream. The read callback will no
- longer be called.
- This function is idempotent and may be safely called on a
- stopped stream.
- Returns: `0` or `fail`
- uv.write({stream}, {data} [, {callback}]) *uv.write()*
- > method form `stream:write(data, [callback])`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- - `data`: `buffer`
- - `callback`: `callable` or `nil`
- - `err`: `nil` or `string`
- Write data to stream.
- `data` can either be a Lua string or a table of strings. If a
- table is passed in, the C backend will use writev to send all
- strings in a single system call.
- The optional `callback` is for knowing when the write is
- complete.
- Returns: `uv_write_t userdata` or `fail`
- uv.write2({stream}, {data}, {send_handle} [, {callback}]) *uv.write2()*
- > method form `stream:write2(data, send_handle, [callback])`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- - `data`: `buffer`
- - `send_handle`: `userdata` for sub-type of |uv_stream_t|
- - `callback`: `callable` or `nil`
- - `err`: `nil` or `string`
- Extended write function for sending handles over a pipe. The
- pipe must be initialized with `ipc` option `true`.
- Returns: `uv_write_t userdata` or `fail`
- Note: `send_handle` must be a TCP socket or pipe, which is a
- server or a connection (listening or connected state). Bound
- sockets or pipes will be assumed to be servers.
- uv.try_write({stream}, {data}) *uv.try_write()*
- > method form `stream:try_write(data)`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- - `data`: `buffer`
- Same as |uv.write()|, but won't queue a write request if it
- can't be completed immediately.
- Will return number of bytes written (can be less than the
- supplied buffer size).
- Returns: `integer` or `fail`
- uv.try_write2({stream}, {data}, {send_handle}) *uv.try_write2()*
- > method form `stream:try_write2(data, send_handle)`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- - `data`: `buffer`
- - `send_handle`: `userdata` for sub-type of |uv_stream_t|
- Like |uv.write2()|, but with the properties of
- |uv.try_write()|. Not supported on Windows, where it returns
- `UV_EAGAIN`.
- Will return number of bytes written (can be less than the
- supplied buffer size).
- Returns: `integer` or `fail`
- uv.is_readable({stream}) *uv.is_readable()*
- > method form `stream:is_readable()`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- Returns `true` if the stream is readable, `false` otherwise.
- Returns: `boolean`
- uv.is_writable({stream}) *uv.is_writable()*
- > method form `stream:is_writable()`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- Returns `true` if the stream is writable, `false` otherwise.
- Returns: `boolean`
- uv.stream_set_blocking({stream}, {blocking}) *uv.stream_set_blocking()*
- > method form `stream:set_blocking(blocking)`
- Parameters:
- - `stream`: `userdata` for sub-type of |uv_stream_t|
- - `blocking`: `boolean`
- Enable or disable blocking mode for a stream.
- When blocking mode is enabled all writes complete
- synchronously. The interface remains unchanged otherwise, e.g.
- completion or failure of the operation will still be reported
- through a callback which is made asynchronously.
- Returns: `0` or `fail`
- WARNING: Relying too much on this API is not recommended. It
- is likely to change significantly in the future. Currently
- this only works on Windows and only for |uv_pipe_t| handles.
- Also libuv currently makes no ordering guarantee when the
- blocking mode is changed after write requests have already
- been submitted. Therefore it is recommended to set the
- blocking mode immediately after opening or creating the
- stream.
- uv.stream_get_write_queue_size() *uv.stream_get_write_queue_size()*
- > method form `stream:get_write_queue_size()`
- Returns the stream's write queue size.
- Returns: `integer`
- ==============================================================================
- `uv_tcp_t` — TCP handle *luv-tcp-handle* *uv_tcp_t*
- > |uv_handle_t| and |uv_stream_t| functions also apply.
- TCP handles are used to represent both TCP streams and servers.
- uv.new_tcp([{flags}]) *uv.new_tcp()*
- Parameters:
- - `flags`: `string` or `nil`
- Creates and initializes a new |uv_tcp_t|. Returns the Lua
- userdata wrapping it. Flags may be a family string: `"unix"`,
- `"inet"`, `"inet6"`, `"ipx"`, `"netlink"`, `"x25"`, `"ax25"`,
- `"atmpvc"`, `"appletalk"`, or `"packet"`.
- Returns: `uv_tcp_t userdata` or `fail`
- uv.tcp_open({tcp}, {sock}) *uv.tcp_open()*
- > method form `tcp:open(sock)`
- Parameters:
- - `tcp`: `uv_tcp_t userdata`
- - `sock`: `integer`
- Open an existing file descriptor or SOCKET as a TCP handle.
- Returns: `0` or `fail`
- Note: The passed file descriptor or SOCKET is not checked for
- its type, but it's required that it represents a valid stream
- socket.
- uv.tcp_nodelay({tcp}, {enable}) *uv.tcp_nodelay()*
- > method form `tcp:nodelay(enable)`
- Parameters:
- - `tcp`: `uv_tcp_t userdata`
- - `enable`: `boolean`
- Enable / disable Nagle's algorithm.
- Returns: `0` or `fail`
- uv.tcp_keepalive({tcp}, {enable} [, {delay}]) *uv.tcp_keepalive()*
- > method form `tcp:keepalive(enable, [delay])`
- Parameters:
- - `tcp`: `uv_tcp_t userdata`
- - `enable`: `boolean`
- - `delay`: `integer` or `nil`
- Enable / disable TCP keep-alive. `delay` is the initial delay
- in seconds, ignored when enable is `false`.
- Returns: `0` or `fail`
- uv.tcp_simultaneous_accepts({tcp}, {enable}) *uv.tcp_simultaneous_accepts()*
- > method form `tcp:simultaneous_accepts(enable)`
- Parameters:
- - `tcp`: `uv_tcp_t userdata`
- - `enable`: `boolean`
- Enable / disable simultaneous asynchronous accept requests
- that are queued by the operating system when listening for new
- TCP connections.
- This setting is used to tune a TCP server for the desired
- performance. Having simultaneous accepts can significantly
- improve the rate of accepting connections (which is why it is
- enabled by default) but may lead to uneven load distribution
- in multi-process setups.
- Returns: `0` or `fail`
- uv.tcp_bind({tcp}, {host}, {port} [, {flags}]) *uv.tcp_bind()*
- > method form `tcp:bind(host, port, [flags])`
- Parameters:
- - `tcp`: `uv_tcp_t userdata`
- - `host`: `string`
- - `port`: `integer`
- - `flags`: `table` or `nil`
- - `ipv6only`: `boolean`
- Bind the handle to an host and port. `host` should be an IP
- address and not a domain name. Any `flags` are set with a
- table with field `ipv6only` equal to `true` or `false`.
- When the port is already taken, you can expect to see an
- `EADDRINUSE` error from either `uv.tcp_bind()`, |uv.listen()|
- or |uv.tcp_connect()|. That is, a successful call to this
- function does not guarantee that the call to |uv.listen()| or
- |uv.tcp_connect()| will succeed as well.
- Use a port of `0` to let the OS assign an ephemeral port. You
- can look it up later using |uv.tcp_getsockname()|.
- Returns: `0` or `fail`
- uv.tcp_getpeername({tcp}) *uv.tcp_getpeername()*
- > method form `tcp:getpeername()`
- Parameters:
- - `tcp`: `uv_tcp_t userdata`
- Get the address of the peer connected to the handle.
- Returns: `table` or `fail`
- - `ip` : `string`
- - `family` : `string`
- - `port` : `integer`
- uv.tcp_getsockname({tcp}) *uv.tcp_getsockname()*
- > method form `tcp:getsockname()`
- Parameters:
- - `tcp`: `uv_tcp_t userdata`
- Get the current address to which the handle is bound.
- Returns: `table` or `fail`
- - `ip` : `string`
- - `family` : `string`
- - `port` : `integer`
- uv.tcp_connect({tcp}, {host}, {port}, {callback}) *uv.tcp_connect()*
- > method form `tcp:connect(host, port, callback)`
- Parameters:
- - `tcp`: `uv_tcp_t userdata`
- - `host`: `string`
- - `port`: `integer`
- - `callback`: `callable`
- - `err`: `nil` or `string`
- Establish an IPv4 or IPv6 TCP connection.
- Returns: `uv_connect_t userdata` or `fail`
- >lua
- local client = uv.new_tcp()
- client:connect("127.0.0.1", 8080, function (err)
- -- check error and carry on.
- end)
- <
- uv.tcp_write_queue_size({tcp}) *uv.tcp_write_queue_size()*
- > method form `tcp:write_queue_size()`
- DEPRECATED: Please use |uv.stream_get_write_queue_size()|
- instead.
- uv.tcp_close_reset([{callback}]) *uv.tcp_close_reset()*
- > method form `tcp:close_reset([callback])`
- Parameters:
- - `tcp`: `uv_tcp_t userdata`
- - `callback`: `callable` or `nil`
- Resets a TCP connection by sending a RST packet. This is
- accomplished by setting the SO_LINGER socket option with a
- linger interval of zero and then calling |uv.close()|. Due to
- some platform inconsistencies, mixing of |uv.shutdown()| and
- `uv.tcp_close_reset()` calls is not allowed.
- Returns: `0` or `fail`
- *uv.socketpair()*
- uv.socketpair([{socktype}, [{protocol}, [{flags1}, [{flags2}]]]])
- Parameters:
- - `socktype`: `string`, `integer` or `nil` (default: `stream`)
- - `protocol`: `string`, `integer` or `nil` (default: 0)
- - `flags1`: `table` or `nil`
- - `nonblock`: `boolean` (default: `false`)
- - `flags2`: `table` or `nil`
- - `nonblock`: `boolean` (default: `false`)
- Create a pair of connected sockets with the specified
- properties. The resulting handles can be passed to
- |uv.tcp_open()|, used with |uv.spawn()|, or for any other
- purpose.
- When specified as a string, `socktype` must be one of
- `"stream"`, `"dgram"`, `"raw"`, `"rdm"`, or `"seqpacket"`.
- When `protocol` is set to 0 or nil, it will be automatically
- chosen based on the socket's domain and type. When `protocol`
- is specified as a string, it will be looked up using the
- `getprotobyname(3)` function (examples: `"ip"`, `"icmp"`,
- `"tcp"`, `"udp"`, etc).
- Flags:
- - `nonblock`: Opens the specified socket handle for
- `OVERLAPPED` or `FIONBIO`/`O_NONBLOCK` I/O usage. This is
- recommended for handles that will be used by libuv, and not
- usually recommended otherwise.
- Equivalent to `socketpair(2)` with a domain of `AF_UNIX`.
- Returns: `table` or `fail`
- - `[1, 2]` : `integer` (file descriptor)
- >lua
- -- Simple read/write with tcp
- local fds = uv.socketpair(nil, nil, {nonblock=true}, {nonblock=true})
- local sock1 = uv.new_tcp()
- sock1:open(fds[1])
- local sock2 = uv.new_tcp()
- sock2:open(fds[2])
- sock1:write("hello")
- sock2:read_start(function(err, chunk)
- assert(not err, err)
- print(chunk)
- end)
- <
- ==============================================================================
- `uv_pipe_t` — Pipe handle *luv-pipe-handle* *uv_pipe_t*
- > |uv_handle_t| and |uv_stream_t| functions also apply.
- Pipe handles provide an abstraction over local domain sockets on Unix and
- named pipes on Windows.
- >lua
- local pipe = uv.new_pipe(false)
- pipe:bind('/tmp/sock.test')
- pipe:listen(128, function()
- local client = uv.new_pipe(false)
- pipe:accept(client)
- client:write("hello!\n")
- client:close()
- end)
- <
- uv.new_pipe([{ipc}]) *uv.new_pipe()*
- Parameters:
- - `ipc`: `boolean` or `nil` (default: `false`)
- Creates and initializes a new |uv_pipe_t|. Returns the Lua
- userdata wrapping it. The `ipc` argument is a boolean to
- indicate if this pipe will be used for handle passing between
- processes.
- Returns: `uv_pipe_t userdata` or `fail`
- uv.pipe_open({pipe}, {fd}) *uv.pipe_open()*
- > method form `pipe:open(fd)`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- - `fd`: `integer`
- Open an existing file descriptor or |uv_handle_t| as a
- pipe.
- Returns: `0` or `fail`
- Note: The file descriptor is set to non-blocking mode.
- uv.pipe_bind({pipe}, {name}) *uv.pipe_bind()*
- > method form `pipe:bind(name)`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- - `name`: `string`
- Bind the pipe to a file path (Unix) or a name (Windows).
- Returns: `0` or `fail`
- Note: Paths on Unix get truncated to
- sizeof(sockaddr_un.sun_path) bytes, typically between 92 and
- 108 bytes.
- uv.pipe_connect({pipe}, {name} [, {callback}]) *uv.pipe_connect()*
- > method form `pipe:connect(name, [callback])`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- - `name`: `string`
- - `callback`: `callable` or `nil`
- - `err`: `nil` or `string`
- Connect to the Unix domain socket or the named pipe.
- Returns: `uv_connect_t userdata` or `fail`
- Note: Paths on Unix get truncated to
- sizeof(sockaddr_un.sun_path) bytes, typically between 92 and
- 108 bytes.
- uv.pipe_getsockname({pipe}) *uv.pipe_getsockname()*
- > method form `pipe:getsockname()`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- Get the name of the Unix domain socket or the named pipe.
- Returns: `string` or `fail`
- uv.pipe_getpeername({pipe}) *uv.pipe_getpeername()*
- > method form `pipe:getpeername()`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- Get the name of the Unix domain socket or the named pipe to
- which the handle is connected.
- Returns: `string` or `fail`
- uv.pipe_pending_instances({pipe}, {count}) *uv.pipe_pending_instances()*
- > method form `pipe:pending_instances(count)`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- - `count`: `integer`
- Set the number of pending pipe instance handles when the pipe
- server is waiting for connections.
- Returns: Nothing.
- Note: This setting applies to Windows only.
- uv.pipe_pending_count({pipe}) *uv.pipe_pending_count()*
- > method form `pipe:pending_count()`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- Returns the pending pipe count for the named pipe.
- Returns: `integer`
- uv.pipe_pending_type({pipe}) *uv.pipe_pending_type()*
- > method form `pipe:pending_type()`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- Used to receive handles over IPC pipes.
- First - call |uv.pipe_pending_count()|, if it's > 0 then
- initialize a handle of the given type, returned by
- `uv.pipe_pending_type()` and call `uv.accept(pipe, handle)` .
- Returns: `string`
- uv.pipe_chmod({pipe}, {flags}) *uv.pipe_chmod()*
- > method form `pipe:chmod(flags)`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- - `flags`: `string`
- Alters pipe permissions, allowing it to be accessed from
- processes run by different users. Makes the pipe writable or
- readable by all users. `flags` are: `"r"`, `"w"`, `"rw"`, or
- `"wr"` where `r` is `READABLE` and `w` is `WRITABLE`. This
- function is blocking.
- Returns: `0` or `fail`
- uv.pipe({read_flags}, {write_flags}) *uv.pipe()*
- Parameters:
- - `read_flags`: `table` or `nil`
- - `nonblock`: `boolean` (default: `false`)
- - `write_flags`: `table` or `nil`
- - `nonblock`: `boolean` (default: `false`)
- Create a pair of connected pipe handles. Data may be written
- to the `write` fd and read from the `read` fd. The resulting
- handles can be passed to `pipe_open`, used with `spawn`, or
- for any other purpose.
- Flags:
- - `nonblock`: Opens the specified socket handle for
- `OVERLAPPED` or `FIONBIO`/`O_NONBLOCK` I/O usage. This is
- recommended for handles that will be used by libuv, and not
- usually recommended otherwise.
- Equivalent to `pipe(2)` with the `O_CLOEXEC` flag set.
- Returns: `table` or `fail`
- - `read` : `integer` (file descriptor)
- - `write` : `integer` (file descriptor)
- >lua
- -- Simple read/write with pipe_open
- local fds = uv.pipe({nonblock=true}, {nonblock=true})
- local read_pipe = uv.new_pipe()
- read_pipe:open(fds.read)
- local write_pipe = uv.new_pipe()
- write_pipe:open(fds.write)
- write_pipe:write("hello")
- read_pipe:read_start(function(err, chunk)
- assert(not err, err)
- print(chunk)
- end)
- <
- uv.pipe_bind2({pipe}, {name}, {flags}) *uv.pipe_bind2()*
- > method form `pipe:pipe_bind(name, flags)`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- - `name`: `string`
- - `flags`: `integer` or `table` or `nil` (default: 0)
- Flags:
- - If `type(flags)` is `number`, it must be `0` or
- `uv.constants.PIPE_NO_TRUNCATE`.
- - If `type(flags)` is `table`, it must be `{}` or
- `{ no_truncate = true|false }`.
- - If `type(flags)` is `nil`, it use default value `0`.
- - Returns `EINVAL` for unsupported flags without performing the
- bind.
- Bind the pipe to a file path (Unix) or a name (Windows).
- Supports Linux abstract namespace sockets. namelen must include
- the leading '\0' byte but not the trailing nul byte.
- Returns: `0` or `fail`
- *Note*:
- 1. Paths on Unix get truncated to sizeof(sockaddr_un.sun_path)
- bytes, typically between 92 and 108 bytes.
- 2. New in version 1.46.0.
- uv.pipe_connect2(pipe, name, [flags], [callback]) *uv.pipe_connect2()*
- > method form `pipe:connect2(name, [flags], [callback])`
- Parameters:
- - `pipe`: `uv_pipe_t userdata`
- - `name`: `string`
- - `flags`: `integer` or `table` or `nil` (default: 0)
- - `callback`: `callable` or `nil`
- - `err`: `nil` or `string`
- `Flags`:
- - If `type(flags)` is `number`, it must be `0` or
- `uv.constants.PIPE_NO_TRUNCATE`.
- - If `type(flags)` is `table`, it must be `{}` or
- `{ no_truncate = true|false }`.
- - If `type(flags)` is `nil`, it use default value `0`.
- - Returns `EINVAL` for unsupported flags without performing the
- bind operation.
- Connect to the Unix domain socket or the named pipe.
- Supports Linux abstract namespace sockets. namelen must include
- the leading nul byte but not the trailing nul byte.
- Returns: `uv_connect_t userdata` or `fail`
- *Note*:
- 1. Paths on Unix get truncated to sizeof(sockaddr_un.sun_path)
- bytes, typically between 92 and 108 bytes.
- 2. New in version 1.46.0.
- ==============================================================================
- `uv_tty_t` — TTY handle *luv-tty-handle* *uv_tty_t*
- > |uv_handle_t| and |uv_stream_t| functions also apply.
- TTY handles represent a stream for the console.
- >lua
- -- Simple echo program
- local stdin = uv.new_tty(0, true)
- local stdout = uv.new_tty(1, false)
- stdin:read_start(function (err, data)
- assert(not err, err)
- if data then
- stdout:write(data)
- else
- stdin:close()
- stdout:close()
- end
- end)
- <
- uv.new_tty({fd}, {readable}) *uv.new_tty()*
- Parameters:
- - `fd`: `integer`
- - `readable`: `boolean`
- Initialize a new TTY stream with the given file descriptor.
- Usually the file descriptor will be:
- - 0 - stdin
- - 1 - stdout
- - 2 - stderr
- On Unix this function will determine the path of the fd of the
- terminal using ttyname_r(3), open it, and use it if the passed
- file descriptor refers to a TTY. This lets libuv put the tty
- in non-blocking mode without affecting other processes that
- share the tty.
- This function is not thread safe on systems that don’t support
- ioctl TIOCGPTN or TIOCPTYGNAME, for instance OpenBSD and
- Solaris.
- Returns: `uv_tty_t userdata` or `fail`
- Note: If reopening the TTY fails, libuv falls back to blocking
- writes.
- uv.tty_set_mode({tty}, {mode}) *uv.tty_set_mode()*
- > method form `tty:set_mode(mode)`
- Parameters:
- - `tty`: `uv_tty_t userdata`
- - `mode`: `integer`
- Set the TTY using the specified terminal mode.
- Parameter `mode` is a C enum with the following values:
- - 0 - UV_TTY_MODE_NORMAL: Initial/normal terminal mode
- - 1 - UV_TTY_MODE_RAW: Raw input mode (On Windows,
- ENABLE_WINDOW_INPUT is also enabled)
- - 2 - UV_TTY_MODE_IO: Binary-safe I/O mode for IPC
- (Unix-only)
- Returns: `0` or `fail`
- uv.tty_reset_mode() *uv.tty_reset_mode()*
- To be called when the program exits. Resets TTY settings to
- default values for the next process to take over.
- This function is async signal-safe on Unix platforms but can
- fail with error code `EBUSY` if you call it when execution is
- inside |uv.tty_set_mode()|.
- Returns: `0` or `fail`
- uv.tty_get_winsize({tty}) *uv.tty_get_winsize()*
- > method form `tty:get_winsize()`
- Parameters:
- - `tty`: `uv_tty_t userdata`
- Gets the current Window width and height.
- Returns: `integer, integer` or `fail`
- uv.tty_set_vterm_state({state}) *uv.tty_set_vterm_state()*
- Parameters:
- - `state`: `string`
- Controls whether console virtual terminal sequences are
- processed by libuv or console. Useful in particular for
- enabling ConEmu support of ANSI X3.64 and Xterm 256 colors.
- Otherwise Windows10 consoles are usually detected
- automatically. State should be one of: `"supported"` or
- `"unsupported"`.
- This function is only meaningful on Windows systems. On Unix
- it is silently ignored.
- Returns: none
- uv.tty_get_vterm_state() *uv.tty_get_vterm_state()*
- Get the current state of whether console virtual terminal
- sequences are handled by libuv or the console. The return
- value is `"supported"` or `"unsupported"`.
- This function is not implemented on Unix, where it returns
- `ENOTSUP`.
- Returns: `string` or `fail`
- ==============================================================================
- `uv_udp_t` — UDP handle *luv-udp-handle* *uv_udp_t*
- > |uv_handle_t| functions also apply.
- UDP handles encapsulate UDP communication for both clients and servers.
- uv.new_udp([{flags}]) *uv.new_udp()*
- Parameters:
- - `flags`: `table` or `nil`
- - `family`: `string` or `nil`
- - `mmsgs`: `integer` or `nil` (default: `1`)
- Creates and initializes a new |uv_udp_t|. Returns the Lua
- userdata wrapping it. The actual socket is created lazily.
- When specified, `family` must be one of `"unix"`, `"inet"`,
- `"inet6"`, `"ipx"`, `"netlink"`, `"x25"`, `"ax25"`,
- `"atmpvc"`, `"appletalk"`, or `"packet"`.
- When specified, `mmsgs` determines the number of messages able
- to be received at one time via `recvmmsg(2)` (the allocated
- buffer will be sized to be able to fit the specified number of
- max size dgrams). Only has an effect on platforms that support
- `recvmmsg(2)`.
- Note: For backwards compatibility reasons, `flags` can also be
- a string or integer. When it is a string, it will be treated
- like the `family` key above. When it is an integer, it will be
- used directly as the `flags` parameter when calling
- `uv_udp_init_ex`.
- Returns: `uv_udp_t userdata` or `fail`
- uv.udp_get_send_queue_size() *uv.udp_get_send_queue_size()*
- > method form `udp:get_send_queue_size()`
- Returns the handle's send queue size.
- Returns: `integer`
- uv.udp_get_send_queue_count() *uv.udp_get_send_queue_count()*
- > method form `udp:get_send_queue_count()`
- Returns the handle's send queue count.
- Returns: `integer`
- uv.udp_open({udp}, {fd}) *uv.udp_open()*
- > method form `udp:open(fd)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `fd`: `integer`
- Opens an existing file descriptor or Windows SOCKET as a UDP
- handle.
- Unix only: The only requirement of the sock argument is that
- it follows the datagram contract (works in unconnected mode,
- supports sendmsg()/recvmsg(), etc). In other words, other
- datagram-type sockets like raw sockets or netlink sockets can
- also be passed to this function.
- The file descriptor is set to non-blocking mode.
- Note: The passed file descriptor or SOCKET is not checked for
- its type, but it's required that it represents a valid
- datagram socket.
- Returns: `0` or `fail`
- uv.udp_bind({udp}, {host}, {port} [, {flags}]) *uv.udp_bind()*
- > method form `udp:bind(host, port, [flags])`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `host`: `string`
- - `port`: `number`
- - `flags`: `table` or `nil`
- - `ipv6only`: `boolean`
- - `reuseaddr`: `boolean`
- Bind the UDP handle to an IP address and port. Any `flags` are
- set with a table with fields `reuseaddr` or `ipv6only` equal
- to `true` or `false`.
- Returns: `0` or `fail`
- uv.udp_getsockname({udp}) *uv.udp_getsockname()*
- > method form `udp:getsockname()`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- Get the local IP and port of the UDP handle.
- Returns: `table` or `fail`
- - `ip` : `string`
- - `family` : `string`
- - `port` : `integer`
- uv.udp_getpeername({udp}) *uv.udp_getpeername()*
- > method form `udp:getpeername()`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- Get the remote IP and port of the UDP handle on connected UDP
- handles.
- Returns: `table` or `fail`
- - `ip` : `string`
- - `family` : `string`
- - `port` : `integer`
- *uv.udp_set_membership()*
- uv.udp_set_membership({udp}, {multicast_addr}, {interface_addr}, {membership})
- > method form
- > `udp:set_membership(multicast_addr, interface_addr, membership)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `multicast_addr`: `string`
- - `interface_addr`: `string` or `nil`
- - `membership`: `string`
- Set membership for a multicast address. `multicast_addr` is
- multicast address to set membership for. `interface_addr` is
- interface address. `membership` can be the string `"leave"` or
- `"join"`.
- Returns: `0` or `fail`
- *uv.udp_set_source_membership()*
- uv.udp_set_source_membership({udp}, {multicast_addr}, {interface_addr}, {source_addr}, {membership})
- > method form
- > `udp:set_source_membership(multicast_addr, interface_addr, source_addr, membership)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `multicast_addr`: `string`
- - `interface_addr`: `string` or `nil`
- - `source_addr`: `string`
- - `membership`: `string`
- Set membership for a source-specific multicast group.
- `multicast_addr` is multicast address to set membership for.
- `interface_addr` is interface address. `source_addr` is source
- address. `membership` can be the string `"leave"` or `"join"`.
- Returns: `0` or `fail`
- uv.udp_set_multicast_loop({udp}, {on}) *uv.udp_set_multicast_loop()*
- > method form `udp:set_multicast_loop(on)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `on`: `boolean`
- Set IP multicast loop flag. Makes multicast packets loop back
- to local sockets.
- Returns: `0` or `fail`
- uv.udp_set_multicast_ttl({udp}, {ttl}) *uv.udp_set_multicast_ttl()*
- > method form `udp:set_multicast_ttl(ttl)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `ttl`: `integer`
- Set the multicast ttl.
- `ttl` is an integer 1 through 255.
- Returns: `0` or `fail`
- *uv.udp_set_multicast_interface()*
- uv.udp_set_multicast_interface({udp}, {interface_addr})
- > method form `udp:set_multicast_interface(interface_addr)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `interface_addr`: `string`
- Set the multicast interface to send or receive data on.
- Returns: `0` or `fail`
- uv.udp_set_broadcast({udp}, {on}) *uv.udp_set_broadcast()*
- > method form `udp:set_broadcast(on)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `on`: `boolean`
- Set broadcast on or off.
- Returns: `0` or `fail`
- uv.udp_set_ttl({udp}, {ttl}) *uv.udp_set_ttl()*
- > method form `udp:set_ttl(ttl)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `ttl`: `integer`
- Set the time to live.
- `ttl` is an integer 1 through 255.
- Returns: `0` or `fail`
- uv.udp_send({udp}, {data}, {host}, {port}, {callback}) *uv.udp_send()*
- > method form `udp:send(data, host, port, callback)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `data`: `buffer`
- - `host`: `string`
- - `port`: `integer`
- - `callback`: `callable`
- - `err`: `nil` or `string`
- Send data over the UDP socket. If the socket has not
- previously been bound with |uv.udp_bind()| it will be bound to
- `0.0.0.0` (the "all interfaces" IPv4 address) and a random
- port number.
- Returns: `uv_udp_send_t userdata` or `fail`
- uv.udp_try_send({udp}, {data}, {host}, {port}) *uv.udp_try_send()*
- > method form `udp:try_send(data, host, port)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `data`: `buffer`
- - `host`: `string`
- - `port`: `integer`
- Same as |uv.udp_send()|, but won't queue a send request if it
- can't be completed immediately.
- Returns: `integer` or `fail`
- uv.udp_recv_start({udp}, {callback}) *uv.udp_recv_start()*
- > method form `udp:recv_start(callback)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `callback`: `callable`
- - `err`: `nil` or `string`
- - `data`: `string` or `nil`
- - `addr`: `table` or `nil`
- - `ip`: `string`
- - `port`: `integer`
- - `family`: `string`
- - `flags`: `table`
- - `partial`: `boolean` or `nil`
- - `mmsg_chunk`: `boolean` or `nil`
- Prepare for receiving data. If the socket has not previously
- been bound with |uv.udp_bind()| it is bound to `0.0.0.0` (the
- "all interfaces" IPv4 address) and a random port number.
- Returns: `0` or `fail`
- uv.udp_recv_stop({udp}) *uv.udp_recv_stop()*
- > method form `udp:recv_stop()`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- Stop listening for incoming datagrams.
- Returns: `0` or `fail`
- uv.udp_connect({udp}, {host}, {port}) *uv.udp_connect()*
- > method form `udp:connect(host, port)`
- Parameters:
- - `udp`: `uv_udp_t userdata`
- - `host`: `string`
- - `port`: `integer`
- Associate the UDP handle to a remote address and port, so
- every message sent by this handle is automatically sent to
- that destination. Calling this function with a NULL addr
- disconnects the handle. Trying to call `uv.udp_connect()` on
- an already connected handle will result in an `EISCONN` error.
- Trying to disconnect a handle that is not connected will
- return an `ENOTCONN` error.
- Returns: `0` or `fail`
- ==============================================================================
- `uv_fs_event_t` — FS Event handle *luv-fs-event-handle* *uv_fs_event_t*
- > |uv_handle_t| functions also apply.
- FS Event handles allow the user to monitor a given path for changes, for
- example, if the file was renamed or there was a generic change in it. This
- handle uses the best backend for the job on each platform.
- uv.new_fs_event() *uv.new_fs_event()*
- Creates and initializes a new |uv_fs_event_t|. Returns the Lua
- userdata wrapping it.
- Returns: `uv_fs_event_t userdata` or `fail`
- uv.fs_event_start({fs_event}, {path}, {flags}, {callback}) *uv.fs_event_start()*
- > method form `fs_event:start(path, flags, callback)`
- Parameters:
- - `fs_event`: `uv_fs_event_t userdata`
- - `path`: `string`
- - `flags`: `table`
- - `watch_entry`: `boolean` or `nil` (default: `false`)
- - `stat`: `boolean` or `nil` (default: `false`)
- - `recursive`: `boolean` or `nil` (default: `false`)
- - `callback`: `callable`
- - `err`: `nil` or `string`
- - `filename`: `string`
- - `events`: `table`
- - `change`: `boolean` or `nil`
- - `rename`: `boolean` or `nil`
- Start the handle with the given callback, which will watch the
- specified path for changes.
- Returns: `0` or `fail`
- uv.fs_event_stop() *uv.fs_event_stop()*
- > method form `fs_event:stop()`
- Stop the handle, the callback will no longer be called.
- Returns: `0` or `fail`
- uv.fs_event_getpath() *uv.fs_event_getpath()*
- > method form `fs_event:getpath()`
- Get the path being monitored by the handle.
- Returns: `string` or `fail`
- ==============================================================================
- `uv_fs_poll_t` — FS Poll handle *luv-fs-poll-handle* *uv_fs_poll_t*
- > |uv_handle_t| functions also apply.
- FS Poll handles allow the user to monitor a given path for changes. Unlike
- |uv_fs_event_t|, fs poll handles use `stat` to detect when a file has changed
- so they can work on file systems where fs event handles can't.
- uv.new_fs_poll() *uv.new_fs_poll()*
- Creates and initializes a new |uv_fs_poll_t|. Returns the Lua
- userdata wrapping it.
- Returns: `uv_fs_poll_t userdata` or `fail`
- uv.fs_poll_start({fs_poll}, {path}, {interval}, {callback}) *uv.fs_poll_start()*
- > method form `fs_poll:start(path, interval, callback)`
- Parameters:
- - `fs_poll`: `uv_fs_poll_t userdata`
- - `path`: `string`
- - `interval`: `integer`
- - `callback`: `callable`
- - `err`: `nil` or `string`
- - `prev`: `table` or `nil` (see `uv.fs_stat`)
- - `curr`: `table` or `nil` (see `uv.fs_stat`)
- Check the file at `path` for changes every `interval`
- milliseconds.
- Note: For maximum portability, use multi-second intervals.
- Sub-second intervals will not detect all changes on many file
- systems.
- Returns: `0` or `fail`
- uv.fs_poll_stop() *uv.fs_poll_stop()*
- > method form `fs_poll:stop()`
- Stop the handle, the callback will no longer be called.
- Returns: `0` or `fail`
- uv.fs_poll_getpath() *uv.fs_poll_getpath()*
- > method form `fs_poll:getpath()`
- Get the path being monitored by the handle.
- Returns: `string` or `fail`
- ==============================================================================
- FILE SYSTEM OPERATIONS *luv-file-system-operations* *uv_fs_t*
- Most file system functions can operate synchronously or asynchronously. When a
- synchronous version is called (by omitting a callback), the function will
- immediately return the results of the FS call. When an asynchronous version is
- called (by providing a callback), the function will immediately return a
- `uv_fs_t userdata` and asynchronously execute its callback; if an error is
- encountered, the first and only argument passed to the callback will be the
- `err` error string; if the operation completes successfully, the first
- argument will be `nil` and the remaining arguments will be the results of the
- FS call.
- Synchronous and asynchronous versions of `readFile` (with naive error
- handling) are implemented below as an example:
- >lua
- local function readFileSync(path)
- local fd = assert(uv.fs_open(path, "r", 438))
- local stat = assert(uv.fs_fstat(fd))
- local data = assert(uv.fs_read(fd, stat.size, 0))
- assert(uv.fs_close(fd))
- return data
- end
- local data = readFileSync("main.lua")
- print("synchronous read", data)
- <
- >lua
- local function readFile(path, callback)
- uv.fs_open(path, "r", 438, function(err, fd)
- assert(not err, err)
- uv.fs_fstat(fd, function(err, stat)
- assert(not err, err)
- uv.fs_read(fd, stat.size, 0, function(err, data)
- assert(not err, err)
- uv.fs_close(fd, function(err)
- assert(not err, err)
- return callback(data)
- end)
- end)
- end)
- end)
- end
- readFile("main.lua", function(data)
- print("asynchronous read", data)
- end)
- <
- uv.fs_close({fd} [, {callback}]) *uv.fs_close()*
- Parameters:
- - `fd`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `close(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_open({path}, {flags}, {mode} [, {callback}]) *uv.fs_open()*
- Parameters:
- - `path`: `string`
- - `flags`: `string` or `integer`
- - `mode`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `fd`: `integer` or `nil`
- Equivalent to `open(2)`. Access `flags` may be an integer or
- one of: `"r"`, `"rs"`, `"sr"`, `"r+"`, `"rs+"`, `"sr+"`,
- `"w"`, `"wx"`, `"xw"`, `"w+"`, `"wx+"`, `"xw+"`, `"a"`,
- `"ax"`, `"xa"`, `"a+"`, `"ax+"`, or "`xa+`".
- Returns (sync version): `integer` or `fail`
- Returns (async version): `uv_fs_t userdata`
- Note: On Windows, libuv uses `CreateFileW` and thus the file
- is always opened in binary mode. Because of this, the
- `O_BINARY` and `O_TEXT` flags are not supported.
- uv.fs_read({fd}, {size} [, {offset} [, {callback}]]) *uv.fs_read()*
- Parameters:
- - `fd`: `integer`
- - `size`: `integer`
- - `offset`: `integer` or `nil`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `data`: `string` or `nil`
- Equivalent to `preadv(2)`. Returns any data. An empty string
- indicates EOF.
- If `offset` is nil or omitted, it will default to `-1`, which
- indicates "use and update the current file offset."
- Note: When `offset` is >= 0, the current file offset will not
- be updated by the read.
- Returns (sync version): `string` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_unlink({path} [, {callback}]) *uv.fs_unlink()*
- Parameters:
- - `path`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `unlink(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_write({fd}, {data} [, {offset} [, {callback}]]) *uv.fs_write()*
- Parameters:
- - `fd`: `integer`
- - `data`: `buffer`
- - `offset`: `integer` or `nil`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `bytes`: `integer` or `nil`
- Equivalent to `pwritev(2)`. Returns the number of bytes
- written.
- If `offset` is nil or omitted, it will default to `-1`, which
- indicates "use and update the current file offset."
- Note: When `offset` is >= 0, the current file offset will not
- be updated by the write.
- Returns (sync version): `integer` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_mkdir({path}, {mode} [, {callback}]) *uv.fs_mkdir()*
- Parameters:
- - `path`: `string`
- - `mode`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `mkdir(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_mkdtemp({template} [, {callback}]) *uv.fs_mkdtemp()*
- Parameters:
- - `template`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `path`: `string` or `nil`
- Equivalent to `mkdtemp(3)`.
- Returns (sync version): `string` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_mkstemp({template} [, {callback}]) *uv.fs_mkstemp()*
- Parameters:
- - `template`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `fd`: `integer` or `nil`
- - `path`: `string` or `nil`
- Equivalent to `mkstemp(3)`. Returns a temporary file handle
- and filename.
- Returns (sync version): `integer, string` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_rmdir({path} [, {callback}]) *uv.fs_rmdir()*
- Parameters:
- - `path`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `rmdir(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_scandir({path} [, {callback}]) *uv.fs_scandir()*
- Parameters:
- - `path`: `string`
- - `callback`: `callable`
- - `err`: `nil` or `string`
- - `success`: `uv_fs_t userdata` or `nil`
- Equivalent to `scandir(3)`, with a slightly different API.
- Returns a handle that the user can pass to
- |uv.fs_scandir_next()|.
- Note: This function can be used synchronously or
- asynchronously. The request userdata is always synchronously
- returned regardless of whether a callback is provided and the
- same userdata is passed to the callback if it is provided.
- Returns: `uv_fs_t userdata` or `fail`
- uv.fs_scandir_next({fs}) *uv.fs_scandir_next()*
- Parameters:
- - `fs`: `uv_fs_t userdata`
- Called on a |uv_fs_t| returned by |uv.fs_scandir()| to get the
- next directory entry data as a `name, type` pair. When there
- are no more entries, `nil` is returned.
- Note: This function only has a synchronous version. See
- |uv.fs_opendir()| and its related functions for an
- asynchronous version.
- Returns: `string, string` or `nil` or `fail`
- uv.fs_stat({path} [, {callback}]) *uv.fs_stat()*
- Parameters:
- - `path`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `stat`: `table` or `nil` (see below)
- Equivalent to `stat(2)`.
- Returns (sync version): `table` or `fail`
- - `dev` : `integer`
- - `mode` : `integer`
- - `nlink` : `integer`
- - `uid` : `integer`
- - `gid` : `integer`
- - `rdev` : `integer`
- - `ino` : `integer`
- - `size` : `integer`
- - `blksize` : `integer`
- - `blocks` : `integer`
- - `flags` : `integer`
- - `gen` : `integer`
- - `atime` : `table`
- - `sec` : `integer`
- - `nsec` : `integer`
- - `mtime` : `table`
- - `sec` : `integer`
- - `nsec` : `integer`
- - `ctime` : `table`
- - `sec` : `integer`
- - `nsec` : `integer`
- - `birthtime` : `table`
- - `sec` : `integer`
- - `nsec` : `integer`
- - `type` : `string`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_fstat({fd} [, {callback}]) *uv.fs_fstat()*
- Parameters:
- - `fd`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `stat`: `table` or `nil` (see `uv.fs_stat`)
- Equivalent to `fstat(2)`.
- Returns (sync version): `table` or `fail` (see `uv.fs_stat`)
- Returns (async version): `uv_fs_t userdata`
- uv.fs_lstat({path} [, {callback}]) *uv.fs_lstat()*
- Parameters:
- - `path`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `stat`: `table` or `nil` (see `uv.fs_stat`)
- Equivalent to `lstat(2)`.
- Returns (sync version): `table` or `fail` (see |uv.fs_stat()|)
- Returns (async version): `uv_fs_t userdata`
- uv.fs_rename({path}, {new_path} [, {callback}]) *uv.fs_rename()*
- Parameters:
- - `path`: `string`
- - `new_path`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `rename(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_fsync({fd} [, {callback}]) *uv.fs_fsync()*
- Parameters:
- - `fd`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `fsync(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_fdatasync({fd} [, {callback}]) *uv.fs_fdatasync()*
- Parameters:
- - `fd`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `fdatasync(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_ftruncate({fd}, {offset} [, {callback}]) *uv.fs_ftruncate()*
- Parameters:
- - `fd`: `integer`
- - `offset`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `ftruncate(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- *uv.fs_sendfile()*
- uv.fs_sendfile({out_fd}, {in_fd}, {in_offset}, {size} [, {callback}])
- Parameters:
- - `out_fd`: `integer`
- - `in_fd`: `integer`
- - `in_offset`: `integer`
- - `size`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `bytes`: `integer` or `nil`
- Limited equivalent to `sendfile(2)`. Returns the number of
- bytes written.
- Returns (sync version): `integer` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_access({path}, {mode} [, {callback}]) *uv.fs_access()*
- Parameters:
- - `path`: `string`
- - `mode`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `permission`: `boolean` or `nil`
- Equivalent to `access(2)` on Unix. Windows uses
- `GetFileAttributesW()`. Access `mode` can be an integer or a
- string containing `"R"` or `"W"` or `"X"`. Returns `true` or
- `false` indicating access permission.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_chmod({path}, {mode} [, {callback}]) *uv.fs_chmod()*
- Parameters:
- - `path`: `string`
- - `mode`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `chmod(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_fchmod({fd}, {mode} [, {callback}]) *uv.fs_fchmod()*
- Parameters:
- - `fd`: `integer`
- - `mode`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `fchmod(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_utime({path}, {atime}, {mtime} [, {callback}]) *uv.fs_utime()*
- Parameters:
- - `path`: `string`
- - `atime`: `number`
- - `mtime`: `number`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `utime(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_futime({fd}, {atime}, {mtime} [, {callback}]) *uv.fs_futime()*
- Parameters:
- - `fd`: `integer`
- - `atime`: `number`
- - `mtime`: `number`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `futime(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_lutime({path}, {atime}, {mtime} [, {callback}]) *uv.fs_lutime()*
- Parameters:
- - `path`: `string`
- - `atime`: `number`
- - `mtime`: `number`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `lutime(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_link({path}, {new_path} [, {callback}]) *uv.fs_link()*
- Parameters:
- - `path`: `string`
- - `new_path`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `link(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_symlink({path}, {new_path} [, {flags} [, {callback}]]) *uv.fs_symlink()*
- Parameters:
- - `path`: `string`
- - `new_path`: `string`
- - `flags`: `table`, `integer`, or `nil`
- - `dir`: `boolean`
- - `junction`: `boolean`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `symlink(2)`. If the `flags` parameter is
- omitted, then the 3rd parameter will be treated as the
- `callback`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_readlink({path} [, {callback}]) *uv.fs_readlink()*
- Parameters:
- - `path`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `path`: `string` or `nil`
- Equivalent to `readlink(2)`.
- Returns (sync version): `string` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_realpath({path} [, {callback}]) *uv.fs_realpath()*
- Parameters:
- - `path`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `path`: `string` or `nil`
- Equivalent to `realpath(3)`.
- Returns (sync version): `string` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_chown({path}, {uid}, {gid} [, {callback}]) *uv.fs_chown()*
- Parameters:
- - `path`: `string`
- - `uid`: `integer`
- - `gid`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `chown(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_fchown({fd}, {uid}, {gid} [, {callback}]) *uv.fs_fchown()*
- Parameters:
- - `fd`: `integer`
- - `uid`: `integer`
- - `gid`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `fchown(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_lchown({fd}, {uid}, {gid} [, {callback}]) *uv.fs_lchown()*
- Parameters:
- - `fd`: `integer`
- - `uid`: `integer`
- - `gid`: `integer`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Equivalent to `lchown(2)`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_copyfile({path}, {new_path} [, {flags} [, {callback}]]) *uv.fs_copyfile()*
- Parameters:
- - `path`: `string`
- - `new_path`: `string`
- - `flags`: `table`, `integer`, or `nil`
- - `excl`: `boolean`
- - `ficlone`: `boolean`
- - `ficlone_force`: `boolean`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Copies a file from path to new_path. If the `flags` parameter
- is omitted, then the 3rd parameter will be treated as the
- `callback`.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_opendir({path} [, {callback} [, {entries}]]) *uv.fs_opendir()*
- Parameters:
- - `path`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `dir`: `luv_dir_t userdata` or `nil`
- - `entries`: `integer` or `nil`
- Opens path as a directory stream. Returns a handle that the
- user can pass to |uv.fs_readdir()|. The `entries` parameter
- defines the maximum number of entries that should be returned
- by each call to |uv.fs_readdir()|.
- Returns (sync version): `luv_dir_t userdata` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_readdir({dir} [, {callback}]) *uv.fs_readdir()*
- > method form `dir:readdir([callback])`
- Parameters:
- - `dir`: `luv_dir_t userdata`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `entries`: `table` or `nil` (see below)
- Iterates over the directory stream `luv_dir_t` returned by a
- successful |uv.fs_opendir()| call. A table of data tables is
- returned where the number of entries `n` is equal to or less
- than the `entries` parameter used in the associated
- |uv.fs_opendir()| call.
- Returns (sync version): `table` or `fail`
- - `[1, 2, 3, ..., n]` : `table`
- - `name` : `string`
- - `type` : `string`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_closedir({dir} [, {callback}]) *uv.fs_closedir()*
- > method form `dir:closedir([callback])`
- Parameters:
- - `dir`: `luv_dir_t userdata`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `success`: `boolean` or `nil`
- Closes a directory stream returned by a successful
- |uv.fs_opendir()| call.
- Returns (sync version): `boolean` or `fail`
- Returns (async version): `uv_fs_t userdata`
- uv.fs_statfs({path} [, {callback}]) *uv.fs_statfs()*
- Parameters:
- - `path`: `string`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `table` or `nil` (see below)
- Equivalent to `statfs(2)`.
- Returns `table` or `nil`
- - `type` : `integer`
- - `bsize` : `integer`
- - `blocks` : `integer`
- - `bfree` : `integer`
- - `bavail` : `integer`
- - `files` : `integer`
- - `ffree` : `integer`
- ==============================================================================
- THREAD POOL WORK SCHEDULING *luv-thread-pool-work-scheduling*
- Libuv provides a threadpool which can be used to run user code and get
- notified in the loop thread. This threadpool is internally used to run all
- file system operations, as well as `getaddrinfo` and `getnameinfo` requests.
- >lua
- local function work_callback(a, b)
- return a + b
- end
- local function after_work_callback(c)
- print("The result is: " .. c)
- end
- local work = uv.new_work(work_callback, after_work_callback)
- work:queue(1, 2)
- -- output: "The result is: 3"
- <
- uv.new_work({work_callback}, {after_work_callback}) *uv.new_work()*
- Parameters:
- - `work_callback`: `function` or `string`
- - `...`: `threadargs` passed to/from
- `uv.queue_work(work_ctx, ...)`
- - `after_work_callback`: `function`
- - `...`: `threadargs` returned from `work_callback`
- Creates and initializes a new `luv_work_ctx_t` (not
- `uv_work_t`).
- `work_callback` is a Lua function or a string containing Lua
- code or bytecode dumped from a function. Returns the Lua
- userdata wrapping it.
- Returns: `luv_work_ctx_t userdata`
- uv.queue_work({work_ctx}, {...}) *uv.queue_work()*
- > method form `work_ctx:queue(...)`
- Parameters:
- - `work_ctx`: `luv_work_ctx_t userdata`
- - `...`: `threadargs`
- Queues a work request which will run `work_callback` in a new
- Lua state in a thread from the threadpool with any additional
- arguments from `...`. Values returned from `work_callback` are
- passed to `after_work_callback`, which is called in the main
- loop thread.
- Returns: `boolean` or `fail`
- ==============================================================================
- DNS UTILITY FUNCTIONS *luv-dns-utility-functions*
- uv.getaddrinfo({host}, {service} [, {hints} [, {callback}]]) *uv.getaddrinfo()*
- Parameters:
- - `host`: `string` or `nil`
- - `service`: `string` or `nil`
- - `hints`: `table` or `nil`
- - `family`: `string` or `integer` or `nil`
- - `socktype`: `string` or `integer` or `nil`
- - `protocol`: `string` or `integer` or `nil`
- - `addrconfig`: `boolean` or `nil`
- - `v4mapped`: `boolean` or `nil`
- - `all`: `boolean` or `nil`
- - `numerichost`: `boolean` or `nil`
- - `passive`: `boolean` or `nil`
- - `numericserv`: `boolean` or `nil`
- - `canonname`: `boolean` or `nil`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `addresses`: `table` or `nil` (see below)
- Equivalent to `getaddrinfo(3)`. Either `node` or `service` may
- be `nil` but not both.
- Valid hint strings for the keys that take a string:
- - `family`: `"unix"`, `"inet"`, `"inet6"`, `"ipx"`,
- `"netlink"`, `"x25"`, `"ax25"`, `"atmpvc"`, `"appletalk"`,
- or `"packet"`
- - `socktype`: `"stream"`, `"dgram"`, `"raw"`, `"rdm"`, or
- `"seqpacket"`
- - `protocol`: will be looked up using the `getprotobyname(3)`
- function (examples: `"ip"`, `"icmp"`, `"tcp"`, `"udp"`, etc)
- Returns (sync version): `table` or `fail`
- - `[1, 2, 3, ..., n]` : `table`
- - `addr` : `string`
- - `family` : `string`
- - `port` : `integer` or `nil`
- - `socktype` : `string`
- - `protocol` : `string`
- - `canonname` : `string` or `nil`
- Returns (async version): `uv_getaddrinfo_t userdata` or `fail`
- uv.getnameinfo({address} [, {callback}]) *uv.getnameinfo()*
- Parameters:
- - `address`: `table`
- - `ip`: `string` or `nil`
- - `port`: `integer` or `nil`
- - `family`: `string` or `integer` or `nil`
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `host`: `string` or `nil`
- - `service`: `string` or `nil`
- Equivalent to `getnameinfo(3)`.
- When specified, `family` must be one of `"unix"`, `"inet"`,
- `"inet6"`, `"ipx"`, `"netlink"`, `"x25"`, `"ax25"`,
- `"atmpvc"`, `"appletalk"`, or `"packet"`.
- Returns (sync version): `string, string` or `fail`
- Returns (async version): `uv_getnameinfo_t userdata` or `fail`
- ==============================================================================
- THREADING AND SYNCHRONIZATION UTILITIES *luv-threading-and-synchronization-utilities*
- Libuv provides cross-platform implementations for multiple threading an
- synchronization primitives. The API largely follows the pthreads API.
- uv.new_thread([{options}, ] {entry}, {...}) *uv.new_thread()*
- Parameters:
- - `options`: `table` or `nil`
- - `stack_size`: `integer` or `nil`
- - `entry`: `function` or `string`
- - `...`: `threadargs` passed to `entry`
- Creates and initializes a `luv_thread_t` (not `uv_thread_t`).
- Returns the Lua userdata wrapping it and asynchronously
- executes `entry`, which can be either a Lua function or a
- string containing Lua code or bytecode dumped from a function.
- Additional arguments `...` are passed to the `entry` function
- and an optional `options` table may be provided. Currently
- accepted `option` fields are `stack_size`.
- Returns: `luv_thread_t userdata` or `fail`
- Note: unsafe, please make sure that the thread's end of life
- is before Lua state is closed.
- uv.thread_equal({thread}, {other_thread}) *uv.thread_equal()*
- > method form `thread:equal(other_thread)`
- Parameters:
- - `thread`: `luv_thread_t userdata`
- - `other_thread`: `luv_thread_t userdata`
- Returns a boolean indicating whether two threads are the same.
- This function is equivalent to the `__eq` metamethod.
- Returns: `boolean`
- *uv.thread_setaffinity()*
- uv.thread_setaffinity({thread}, {affinity} [, {get_old_affinity}])
- > method form `thread:setaffinity(affinity, [get_old_affinity])`
- Parameters:
- - `thread`: `luv_thread_t userdata`
- - `affinity`: `table`
- - `[1, 2, 3, ..., n]` : `boolean`
- - `get_old_affinity`: `boolean`
- Sets the specified thread's affinity setting.
- `affinity` must be a table where each of the keys are a CPU
- number and the values are booleans that represent whether the
- `thread` should be eligible to run on that CPU. If the length
- of the `affinity` table is not greater than or equal to
- |uv.cpumask_size()|, any CPU numbers missing from the table
- will have their affinity set to `false`. If setting the
- affinity of more than |uv.cpumask_size()| CPUs is desired,
- `affinity` must be an array-like table with no gaps, since
- `#affinity` will be used as the `cpumask_size` if it is
- greater than |uv.cpumask_size()|.
- If `get_old_affinity` is `true`, the previous affinity
- settings for the `thread` will be returned. Otherwise, `true`
- is returned after a successful call.
- Note: Thread affinity setting is not atomic on Windows.
- Unsupported on macOS.
- Returns: `table` or `boolean` or `fail`
- - `[1, 2, 3, ..., n]` : `boolean`
- uv.thread_getaffinity({thread} [, {mask_size}]) *uv.thread_getaffinity()*
- > method form `thread:getaffinity([mask_size])`
- Parameters:
- - `thread`: `luv_thread_t userdata`
- - `mask_size`: `integer`
- Gets the specified thread's affinity setting.
- If `mask_size` is provided, it must be greater than or equal
- to `uv.cpumask_size()`. If the `mask_size` parameter is
- omitted, then the return of `uv.cpumask_size()` will be used.
- Returns an array-like table where each of the keys correspond
- to a CPU number and the values are booleans that represent
- whether the `thread` is eligible to run on that CPU.
- Note: Thread affinity getting is not atomic on Windows.
- Unsupported on macOS.
- Returns: `table` or `fail`
- - `[1, 2, 3, ..., n]` : `boolean`
- uv.thread_getcpu() *uv.thread_getcpu()*
- Gets the CPU number on which the calling thread is running.
- Note: The first CPU will be returned as the number 1, not 0.
- This allows for the number to correspond with the table keys
- used in `uv.thread_getaffinity` and `uv.thread_setaffinity`.
- Returns: `integer` or `fail`
- uv.thread_setpriority({thread}, {priority}) *uv.thread.setpriority()*
- > method form `thread:setpriority(priority)`
- Parameters:
- - `thread`: `luv_thread_t userdata`
- - `priority`: `number`
- Sets the specified thread's scheduling priority setting. It
- requires elevated privilege to set specific priorities on some
- platforms. The priority can be set to the following constants:
- - `uv.constants.THREAD_PRIORITY_HIGHEST`
- - `uv.constants.THREAD_PRIORITY_ABOVE_NORMAL`
- - `uv.constants.THREAD_PRIORITY_NORMAL`
- - `uv.constants.THREAD_PRIORITY_BELOW_NORMAL`
- - `uv.constants.THREAD_PRIORITY_LOWEST`
- Returns: `boolean` or `fail`
- uv.thread_getpriority({thread}) *uv.thread.getpriority()*
- > method form `thread:getpriority()`
- Parameters:
- - `thread`: `luv_thread_t userdata`
- Gets the thread's priority setting.
- Retrieves the scheduling priority of the specified thread. The
- returned priority value is platform dependent.
- For Linux, when schedule policy is SCHED_OTHER (default),
- priority is 0.
- Returns: `number` or `fail`
- uv.thread_self() *uv.thread_self()*
- Returns the handle for the thread in which this is called.
- Returns: `luv_thread_t`
- uv.thread_join({thread}) *uv.thread_join()*
- > method form `thread:join()`
- Parameters:
- - `thread`: `luv_thread_t userdata`
- Waits for the `thread` to finish executing its entry function.
- Returns: `boolean` or `fail`
- uv.sleep({msec}) *uv.sleep()*
- Parameters:
- - `msec`: `integer`
- Pauses the thread in which this is called for a number of
- milliseconds.
- Returns: Nothing.
- ==============================================================================
- MISCELLANEOUS UTILITIES *luv-miscellaneous-utilities*
- uv.exepath() *uv.exepath()*
- Returns the executable path.
- Returns: `string` or `fail`
- uv.cwd() *uv.cwd()*
- Returns the current working directory.
- Returns: `string` or `fail`
- uv.chdir({cwd}) *uv.chdir()*
- Parameters:
- - `cwd`: `string`
- Sets the current working directory with the string `cwd`.
- Returns: `0` or `fail`
- uv.get_process_title() *uv.get_process_title()*
- Returns the title of the current process.
- Returns: `string` or `fail`
- uv.set_process_title({title}) *uv.set_process_title()*
- Parameters:
- - `title`: `string`
- Sets the title of the current process with the string `title`.
- Returns: `0` or `fail`
- uv.get_total_memory() *uv.get_total_memory()*
- Returns the current total system memory in bytes.
- Returns: `number`
- uv.get_free_memory() *uv.get_free_memory()*
- Returns the current free system memory in bytes.
- Returns: `number`
- uv.get_constrained_memory() *uv.get_constrained_memory()*
- Gets the amount of memory available to the process in bytes
- based on limits imposed by the OS. If there is no such
- constraint, or the constraint is unknown, 0 is returned. Note
- that it is not unusual for this value to be less than or
- greater than the total system memory.
- Returns: `number`
- uv.get_available_memory() *uv.get_available_memory()*
- Gets the amount of free memory that is still available to the
- process (in bytes). This differs from `uv.get_free_memory()`
- in that it takes into account any limits imposed by the OS. If
- there is no such constraint, or the constraint is unknown, the
- amount returned will be identical to `uv.get_free_memory()`.
- Returns: `number`
- uv.resident_set_memory() *uv.resident_set_memory()*
- Returns the resident set size (RSS) for the current process.
- Returns: `integer` or `fail`
- uv.getrusage() *uv.getrusage()*
- Returns the resource usage.
- Returns: `table` or `fail`
- - `utime` : `table` (user CPU time used)
- - `sec` : `integer`
- - `usec` : `integer`
- - `stime` : `table` (system CPU time used)
- - `sec` : `integer`
- - `usec` : `integer`
- - `maxrss` : `integer` (maximum resident set size)
- - `ixrss` : `integer` (integral shared memory size)
- - `idrss` : `integer` (integral unshared data size)
- - `isrss` : `integer` (integral unshared stack size)
- - `minflt` : `integer` (page reclaims (soft page faults))
- - `majflt` : `integer` (page faults (hard page faults))
- - `nswap` : `integer` (swaps)
- - `inblock` : `integer` (block input operations)
- - `oublock` : `integer` (block output operations)
- - `msgsnd` : `integer` (IPC messages sent)
- - `msgrcv` : `integer` (IPC messages received)
- - `nsignals` : `integer` (signals received)
- - `nvcsw` : `integer` (voluntary context switches)
- - `nivcsw` : `integer` (involuntary context switches)
- uv.available_parallelism() *uv.available_parallelism()*
- Returns an estimate of the default amount of parallelism a
- program should use. Always returns a non-zero value.
- On Linux, inspects the calling thread’s CPU affinity mask to
- determine if it has been pinned to specific CPUs.
- On Windows, the available parallelism may be underreported on
- systems with more than 64 logical CPUs.
- On other platforms, reports the number of CPUs that the
- operating system considers to be online.
- Returns: `integer`
- uv.cpu_info() *uv.cpu_info()*
- Returns information about the CPU(s) on the system as a table
- of tables for each CPU found.
- Returns: `table` or `fail`
- - `[1, 2, 3, ..., n]` : `table`
- - `model` : `string`
- - `speed` : `number`
- - `times` : `table`
- - `user` : `number`
- - `nice` : `number`
- - `sys` : `number`
- - `idle` : `number`
- - `irq` : `number`
- uv.cpumask_size() *uv.cpumask_size()*
- Returns the maximum size of the mask used for process/thread
- affinities, or `ENOTSUP` if affinities are not supported on
- the current platform.
- Returns: `integer` or `fail`
- uv.getpid() *uv.getpid()*
- DEPRECATED: Please use |uv.os_getpid()| instead.
- uv.getuid() *uv.getuid()*
- Returns the user ID of the process.
- Returns: `integer`
- Note: This is not a libuv function and is not supported on
- Windows.
- uv.getgid() *uv.getgid()*
- Returns the group ID of the process.
- Returns: `integer`
- Note: This is not a libuv function and is not supported on
- Windows.
- uv.setuid({id}) *uv.setuid()*
- Parameters:
- - `id`: `integer`
- Sets the user ID of the process with the integer `id`.
- Returns: Nothing.
- Note: This is not a libuv function and is not supported on
- Windows.
- uv.setgid({id}) *uv.setgid()*
- Parameters:
- - `id`: `integer`
- Sets the group ID of the process with the integer `id`.
- Returns: Nothing.
- Note: This is not a libuv function and is not supported on
- Windows.
- uv.hrtime() *uv.hrtime()*
- Returns a current high-resolution time in nanoseconds as a
- number. This is relative to an arbitrary time in the past. It
- is not related to the time of day and therefore not subject to
- clock drift. The primary use is for measuring time between
- intervals.
- Returns: `number`
- uv.clock_gettime({clock_id}) *uv.clock_gettime()*
- Parameters:
- - `clock_id`: `string`
- Obtain the current system time from a high-resolution
- real-time or monotonic clock source. `clock_id` can be the
- string `"monotonic"` or `"realtime"`.
- The real-time clock counts from the UNIX epoch (1970-01-01)
- and is subject to time adjustments; it can jump back in time.
- The monotonic clock counts from an arbitrary point in the past
- and never jumps back in time.
- Returns: `table` or `fail`
- - `sec`: `integer`
- - `nsec`: `integer`
- uv.uptime() *uv.uptime()*
- Returns the current system uptime in seconds.
- Returns: `number` or `fail`
- uv.print_all_handles() *uv.print_all_handles()*
- Prints all handles associated with the main loop to stderr.
- The format is `[flags] handle-type handle-address` . Flags are
- `R` for referenced, `A` for active and `I` for internal.
- Returns: Nothing.
- Note: This is not available on Windows.
- WARNING: This function is meant for ad hoc debugging, there
- are no API/ABI stability guarantees.
- uv.print_active_handles() *uv.print_active_handles()*
- The same as |uv.print_all_handles()| except only active
- handles are printed.
- Returns: Nothing.
- Note: This is not available on Windows.
- WARNING: This function is meant for ad hoc debugging, there
- are no API/ABI stability guarantees.
- uv.guess_handle({fd}) *uv.guess_handle()*
- Parameters:
- - `fd`: `integer`
- Used to detect what type of stream should be used with a given
- file descriptor `fd`. Usually this will be used during
- initialization to guess the type of the stdio streams.
- Returns: `string`
- uv.gettimeofday() *uv.gettimeofday()*
- Cross-platform implementation of `gettimeofday(2)`. Returns
- the seconds and microseconds of a unix time as a pair.
- Returns: `integer, integer` or `fail`
- uv.interface_addresses() *uv.interface_addresses()*
- Returns address information about the network interfaces on
- the system in a table. Each table key is the name of the
- interface while each associated value is an array of address
- information where fields are `ip`, `family`, `netmask`,
- `internal`, and `mac`.
- Returns: `table`
- - `[name(s)]` : `table`
- - `ip` : `string`
- - `family` : `string`
- - `netmask` : `string`
- - `internal` : `boolean`
- - `mac` : `string`
- uv.if_indextoname({ifindex}) *uv.if_indextoname()*
- Parameters:
- - `ifindex`: `integer`
- IPv6-capable implementation of `if_indextoname(3)`.
- Returns: `string` or `fail`
- uv.if_indextoiid({ifindex}) *uv.if_indextoiid()*
- Parameters:
- - `ifindex`: `integer`
- Retrieves a network interface identifier suitable for use in
- an IPv6 scoped address. On Windows, returns the numeric
- `ifindex` as a string. On all other platforms,
- |uv.if_indextoname()| is used.
- Returns: `string` or `fail`
- uv.loadavg() *uv.loadavg()*
- Returns the load average as a triad. Not supported on Windows.
- Returns: `number, number, number`
- uv.os_uname() *uv.os_uname()*
- Returns system information.
- Returns: `table`
- - `sysname` : `string`
- - `release` : `string`
- - `version` : `string`
- - `machine` : `string`
- uv.os_gethostname() *uv.os_gethostname()*
- Returns the hostname.
- Returns: `string`
- uv.os_getenv({name} [, {size}]) *uv.os_getenv()*
- Parameters:
- - `name`: `string`
- - `size`: `integer` (default = `LUAL_BUFFERSIZE`)
- Returns the environment variable specified by `name` as
- string. The internal buffer size can be set by defining
- `size`. If omitted, `LUAL_BUFFERSIZE` is used. If the
- environment variable exceeds the storage available in the
- internal buffer, `ENOBUFS` is returned. If no matching
- environment variable exists, `ENOENT` is returned.
- Returns: `string` or `fail`
- WARNING: This function is not thread safe.
- uv.os_setenv({name}, {value}) *uv.os_setenv()*
- Parameters:
- - `name`: `string`
- - `value`: `string`
- Sets the environmental variable specified by `name` with the
- string `value`.
- Returns: `boolean` or `fail`
- WARNING: This function is not thread safe.
- uv.os_unsetenv({name}) *uv.os_unsetenv()*
- Parameters:
- - `name`: `string`
- Unsets the environmental variable specified by `name`.
- Returns: `boolean` or `fail`
- WARNING: This function is not thread safe.
- uv.os_environ() *uv.os_environ()*
- Returns all environmental variables as a dynamic table of
- names associated with their corresponding values.
- Returns: `table`
- WARNING: This function is not thread safe.
- uv.os_homedir() *uv.os_homedir()*
- Returns: `string` or `fail`
- WARNING: This function is not thread safe.
- uv.os_tmpdir() *uv.os_tmpdir()*
- Returns: `string` or `fail`
- WARNING: This function is not thread safe.
- uv.os_get_passwd() *uv.os_get_passwd()*
- Returns password file information.
- Returns: `table`
- - `username` : `string`
- - `uid` : `integer`
- - `gid` : `integer`
- - `shell` : `string`
- - `homedir` : `string`
- uv.os_getpid() *uv.os_getpid()*
- Returns the current process ID.
- Returns: `number`
- uv.os_getppid() *uv.os_getppid()*
- Returns the parent process ID.
- Returns: `number`
- uv.os_getpriority({pid}) *uv.os_getpriority()*
- Parameters:
- - `pid`: `integer`
- Returns the scheduling priority of the process specified by
- `pid`.
- Returns: `number` or `fail`
- uv.os_setpriority({pid}, {priority}) *uv.os_setpriority()*
- Parameters:
- - `pid`: `integer`
- - `priority`: `integer`
- Sets the scheduling priority of the process specified by
- `pid`. The `priority` range is between -20 (high priority) and
- 19 (low priority).
- Returns: `boolean` or `fail`
- uv.random({len}, {flags} [, {callback}]) *uv.random()*
- Parameters:
- - `len`: `integer`
- - `flags`: `nil` (see below)
- - `callback`: `callable` (async version) or `nil` (sync
- version)
- - `err`: `nil` or `string`
- - `bytes`: `string` or `nil`
- Fills a string of length `len` with cryptographically strong
- random bytes acquired from the system CSPRNG. `flags` is
- reserved for future extension and must currently be `nil` or
- `0` or `{}`.
- Short reads are not possible. When less than `len` random
- bytes are available, a non-zero error value is returned or
- passed to the callback. If the callback is omitted, this
- function is completed synchronously.
- The synchronous version may block indefinitely when not enough
- entropy is available. The asynchronous version may not ever
- finish when the system is low on entropy.
- Returns (sync version): `string` or `fail`
- Returns (async version): `0` or `fail`
- uv.translate_sys_error({errcode}) *uv.translate_sys_error()*
- Parameters:
- - `errcode`: `integer`
- Returns the libuv error message and error name (both in string
- form, see `err` and `name` in |luv-error-handling|) equivalent
- to the given platform dependent error code: POSIX error codes
- on Unix (the ones stored in errno), and Win32 error codes on
- Windows (those returned by GetLastError() or
- WSAGetLastError()).
- Returns: `string, string` or `nil`
- ==============================================================================
- METRICS OPERATIONS *luv-metrics-operations*
- uv.metrics_idle_time() *uv.metrics_idle_time()*
- Retrieve the amount of time the event loop has been idle in
- the kernel’s event provider (e.g. `epoll_wait`). The call is
- thread safe.
- The return value is the accumulated time spent idle in the
- kernel’s event provider starting from when the |uv_loop_t| was
- configured to collect the idle time.
- Note: The event loop will not begin accumulating the event
- provider’s idle time until calling `loop_configure` with
- `"metrics_idle_time"`.
- Returns: `number`
- uv.metrics_info() *uv.metrics_info()*
- Get the metrics table from current set of event loop metrics.
- It is recommended to retrieve these metrics in a `prepare`
- callback (see |uv.new_prepare()|, |uv.prepare_start()|) in order
- to make sure there are no inconsistencies with the metrics
- counters.
- Returns: `table`
- - `loop_count` : `integer`
- - `events` : `integer`
- - `events_waiting` : `integer`
- ==============================================================================
- CREDITS *luv-credits*
- This document is a reformatted version of the LUV documentation, up-to-date
- with commit dcd1a1c (23 Aug 2023) of the luv repository
- https://github.com/luvit/luv/commit/dcd1a1cad5b05634a7691402d6ca2f214fb4ae76.
- Based on https://github.com/nanotee/luv-vimdocs with kind permission.
- vim:tw=78:ts=8:ft=help:norl:
|