Spec-Zone.ru › Nim

std/socketstreams

Source Edit

Этот модуль предоставляет реализацию интерфейса потоков для сокетов. Он содержит две отдельные реализации: ReadSocketStream и WriteSocketStream.

ReadSocketStream поддерживает только чтение, предварительный просмотр и позиционирование. Он считывает данные в буфер, поэтому даже при перемещении назад он будет считывать только ту же позицию один раз из основного сокета. Чтобы очистить буфер и освободить считанные данные, можно вызвать resetStream, это также сбросит позицию обратно к 0, но не повлияет на основной сокет.

WriteSocketStream позволяет как чтение, так и запись, но выполняет чтение из внутреннего буфера. Таким образом, записав в буфер, можно прочитать обратно записанное значение, не получая ничего из сокета. Также можно установить позицию и перезаписать части буфера, а для отправки данных через сокет необходимо вызвать flush, после чего нельзя ничего записывать в буфер до момента сброса (но его все еще можно прочитать). Опять же, для очистки внутреннего буфера нужно вызвать resetStream.

Примеры

import std/socketstreams

var
  socket = newSocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
  stream = newReadSocketStream(socket)
socket.sendTo("127.0.0.1", Port(12345), "SOME REQUEST")
echo stream.readLine() # Will call `recv`
stream.setPosition(0)
echo stream.readLine() # Will return the read line from the buffer
stream.resetStream() # Buffer is now empty, position is 0
echo stream.readLine() # Will call `recv` again
stream.close() # Closes the socket
import std/socketstreams

var socket = newSocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
socket.connect("127.0.0.1", Port(12345))
var sendStream = newWriteSocketStream(socket)
sendStream.write "NOM"
sendStream.setPosition(1)
echo sendStream.peekStr(2) # OM
sendStream.write "I"
sendStream.setPosition(0)
echo sendStream.readStr(3) # NIM
echo sendStream.getPosition() # 3
sendStream.flush() # This actually performs the writing to the socket
sendStream.setPosition(1)
sendStream.write "I" # Throws an error as we can't write into an already sent buffer

Импорты

net, streams

Типы

ReadSocketStream = ref ReadSocketStreamObj
Source Edit
ReadSocketStreamObj = object of StreamObj
Source Edit
WriteSocketStream = ref WriteSocketStreamObj
Source Edit
WriteSocketStreamObj = object of ReadSocketStreamObj
Source Edit

Процедуры

proc newReadSocketStream(s: Socket): owned ReadSocketStream {....raises: [],
    tags: [], forbids: [].}
Source Edit
proc newWriteSocketStream(s: Socket): owned WriteSocketStream {....raises: [],
    tags: [], forbids: [].}
Source Edit
proc resetStream(s: ReadSocketStream) {....raises: [], tags: [], forbids: [].}
Source Edit
proc resetStream(s: WriteSocketStream) {....raises: [], tags: [], forbids: [].}
Source Edit

© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/socketstreams.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API