12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899 |
- *luvref.txt* Nvim
- LUV REFERENCE MANUAL
- 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.loop| (e.g., |uv.version()|
- is exposed as `vim.loop.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:
- >
- local uv = vim.loop
- 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 one
- non-function field exists: `uv.constants`, which is a table.
- 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`
- ==============================================================================
- 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, these errors and
- 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.
- ==============================================================================
- 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:
- >
- 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.
- >
- -- 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`
- >
- -- 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.
- >
- 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` or `fail`
- 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.
- >
- 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` or `fail`
- 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".
- >
- 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` or `fail`
- 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.
- >
- 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` or `nil`
- - `...`: `threadargs` passed to/from
- `uv.async_send(async, ...)`
- Creates and initializes a new |uv_async_t|. Returns the Lua
- userdata wrapping it. A `nil` callback is allowed.
- 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.
- >
- -- 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.
- >
- 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
- string. The first string should be the path to the
- program. 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`
- 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`
- 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`
- >
- 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`
- >
- 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`
- >
- 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)
- >
- -- 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.
- >
- 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)
- >
- -- 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_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.
- >
- -- 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_event`: `uv_fs_event_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:
- >
- 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)
- <
- >
- 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:
- - `fd`: `integer`
- - `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.
- >
- 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`
- - `...`: `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`). 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`
- - `...`: `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 Lua
- function dumped to a string. 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`
- 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_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.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.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.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() *uv.os_unsetenv()*
- 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`
- ==============================================================================
- CREDITS *luv-credits*
- This document is a reformatted version of the LUV documentation, based on
- commit c51e705 (5 May 2022) of the luv repository
- https://github.com/luvit/luv/commit/c51e7052ec4f0a25058f70c1b4ee99dd36180e59.
- Included from https://github.com/nanotee/luv-vimdocs with kind permission.
- vim:tw=78:ts=8:ft=help:norl:
|