[Issue 4025] New: Making network with the std.stdio.File interface
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Mar 28 15:51:45 PDT 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4025
Summary: Making network with the std.stdio.File interface
Product: D
Version: 2.041
Platform: Other
OS/Version: Linux
Status: NEW
Severity: enhancement
Priority: P2
Component: Phobos
AssignedTo: nobody at puremagic.com
ReportedBy: destructionator at gmail.com
--- Comment #0 from Adam D. Ruppe <destructionator at gmail.com> 2010-03-28 15:51:43 PDT ---
I've written a small module that opens a network connection, then wraps it in
the File struct, allowing you to use the byLine, etc., ranges on it, as well as
writef/readln/etc.
It is Linux only, but should be pretty easy to port to other operating systems.
Ideally, I'd like to eventually be able to use File for talking
to processes too, on all D platforms.
Here's the code I have for now:
==============
public import std.stdio;
import std.string;
import std.conv;
version(linux):
import std.c.linux.linux;
import std.c.linux.socket;
alias std.c.linux.socket sock;
alias std.c.linux.linux linux;
enum int PF_INET = 2;
enum int AF_INET = PF_INET;
extern(C) FILE* fdopen(int, const(char)*);
File openNetwork(string host, ushort port) {
hostent* h;
sockaddr_in addr;
h = gethostbyname(std.string.toStringz(host));
if(h is null)
throw new StdioException("gethostbyname");
int s = socket(PF_INET, SOCK_STREAM, 0);
if(s == -1)
throw new StdioException("socket");
scope(failure)
close(s);
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
std.c.string.memcpy(&addr.sin_addr.s_addr, h.h_addr, h.h_length);
if(sock.connect(s, cast(sockaddr*) &addr, addr.sizeof) == -1)
throw new StdioException("Connect failed");
FILE* fp = fdopen(s, "w+".ptr);
File f;
auto imp = new File.Impl(fp, 1, host ~ ":" ~ to!string(port));
f.p = imp;
return f;
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list