Thread overview
std.socket replacement
Nov 29, 2015
tired_eyes
Nov 29, 2015
tcak
Nov 29, 2015
tired_eyes
Nov 29, 2015
Alex Parrill
Nov 29, 2015
tired_eyes
Sep 04, 2016
Max Freck
November 29, 2015
I was a bit surprised to see that std.socket is deprecated as of 2.069. Just curious, what's wrong with it? And what should I use as a replacement? I know there is vibe.socket, but I don't want to include fullstack web framework as a dependency just to make some HTTP reqests.

I also don't see any proposed replacements in a review queue. Will std.socket and std.socketstream be just thrown away?
November 29, 2015
On Sunday, 29 November 2015 at 08:56:30 UTC, tired_eyes wrote:
> I was a bit surprised to see that std.socket is deprecated as of 2.069. Just curious, what's wrong with it? And what should I use as a replacement? I know there is vibe.socket, but I don't want to include fullstack web framework as a dependency just to make some HTTP reqests.
>
> I also don't see any proposed replacements in a review queue. Will std.socket and std.socketstream be just thrown away?

I would say "WTF" at first, then checked the documentation, but don't see anything
about deprecation. My current whole business relies on that.
November 29, 2015
On Sunday, 29 November 2015 at 09:05:37 UTC, tcak wrote:
> On Sunday, 29 November 2015 at 08:56:30 UTC, tired_eyes wrote:
>> I was a bit surprised to see that std.socket is deprecated as of 2.069. Just curious, what's wrong with it? And what should I use as a replacement? I know there is vibe.socket, but I don't want to include fullstack web framework as a dependency just to make some HTTP reqests.
>>
>> I also don't see any proposed replacements in a review queue. Will std.socket and std.socketstream be just thrown away?
>
> I would say "WTF" at first, then checked the documentation, but don't see anything
> about deprecation. My current whole business relies on that.

Wow, sorry, I meant std.stream and std.socketstream, not std.socket and std.socketstream
November 29, 2015
On Sunday, 29 November 2015 at 09:12:14 UTC, tired_eyes wrote:
> On Sunday, 29 November 2015 at 09:05:37 UTC, tcak wrote:
>> On Sunday, 29 November 2015 at 08:56:30 UTC, tired_eyes wrote:
>>> I was a bit surprised to see that std.socket is deprecated as of 2.069. Just curious, what's wrong with it? And what should I use as a replacement? I know there is vibe.socket, but I don't want to include fullstack web framework as a dependency just to make some HTTP reqests.
>>>
>>> I also don't see any proposed replacements in a review queue. Will std.socket and std.socketstream be just thrown away?
>>
>> I would say "WTF" at first, then checked the documentation, but don't see anything
>> about deprecation. My current whole business relies on that.
>
> Wow, sorry, I meant std.stream and std.socketstream, not std.socket and std.socketstream

std.stream, and the stream interface in general, is deprecated in favor of ranges, which are more generic and flexible.
November 29, 2015
On Sunday, 29 November 2015 at 16:10:22 UTC, Alex Parrill wrote:
> std.stream, and the stream interface in general, is deprecated in favor of ranges, which are more generic and flexible.

Could you please give a small example?
Consider this minimal app:


import std.stdio;
import std.socket;
import std.socketstream;

void main() {
    auto socket = new TcpSocket(new InternetAddress("dlang.org", 80));
    scope(exit) socket.close();

    auto ss = new SocketStream(socket);
    ss.writeString("GET http://dlang.org HTTP/1.1\r\n"
                   "Host: dlang.org\r\n"
                   "Connection: close\r\n"
                   "\r\n");

    while (! ss.eof) {
        writeln(ss.readLine());
    }
}


How should it look with ranges instead of socketstream? I thought I understand ranges in general, but I can't figure out how they can be applied to this case.
September 04, 2016
On Sunday, 29 November 2015 at 18:00:34 UTC, tired_eyes wrote:
> On Sunday, 29 November 2015 at 16:10:22 UTC, Alex Parrill wrote:
>> std.stream, and the stream interface in general, is deprecated in favor of ranges, which are more generic and flexible.
>
> Could you please give a small example?
> Consider this minimal app:
>
>
> import std.stdio;
> import std.socket;
> import std.socketstream;
>
> void main() {
>     auto socket = new TcpSocket(new InternetAddress("dlang.org", 80));
>     scope(exit) socket.close();
>
>     auto ss = new SocketStream(socket);
>     ss.writeString("GET http://dlang.org HTTP/1.1\r\n"
>                    "Host: dlang.org\r\n"
>                    "Connection: close\r\n"
>                    "\r\n");
>
>     while (! ss.eof) {
>         writeln(ss.readLine());
>     }
> }
>
>
> How should it look with ranges instead of socketstream? I thought I understand ranges in general, but I can't figure out how they can be applied to this case.

In case someone is still looking for the answer, just like me. It will be something like that:


import std.stdio;
import std.socket;

enum receiveBufferLength = 1024;

void main() {
  auto socket = new TcpSocket(new InternetAddress("dlang.org", 80));
  scope(exit) socket.close();

  socket.send("GET http://dlang.org HTTP/1.1\r\nHost: dlang.org\r\nConnection: close\r\n\r\n");

  string response;
  char[receiveBufferLength] receiveBuffer;

  while (true) {
    auto received = socket.receive(receiveBuffer[0 .. receiveBufferLength]);
    response ~= receiveBuffer[0 .. received];
    if (received == 0) break;
  }
  write(response);
}