import std.stdio ;
import std.socket ;
import core.memory ;
Socket tcpConnect( Address[ ] addresses)
{
auto sock = new TcpSocket( AddressFamily.INET ) ;
foreach ( addr; addresses)
{
try
{
sock.connect ( addr) ;
break ;
}
catch ( SocketException e)
{ }
}
return sock.isAlive ? sock : null ;
}
string buildHttpRequest( string host, string path)
{
return "GET " ~ path ~ "\r \n "
"Host: " ~ host ~ "\r \n "
"Connection: close\r \n "
"HTTP/1.1\r \n "
"\r \n " ;
}
void sendFully( Socket sock, const ( void ) [ ] data)
{
ptrdiff_t sent;
do data = data[ ( sent = sock.send ( data) ) .. $] ;
while ( sent > 0 ) ;
}
void [ ] receiveFully( Socket sock)
{
auto result = new char [ 0 ] ;
auto buf = new char [ 1024 ] ;
ptrdiff_t recvd;
do result ~= buf[ 0 .. ( recvd = sock.receive ( buf) ) ] ;
while ( recvd > 0 ) ;
return result;
}
enum HOST = "www.c-plusplus.de" ;
enum PATH = "/forum" ;
enum PORT = 80 ;
void main( )
{
try
{
auto sock = tcpConnect( getAddress( HOST, PORT) ) ;
if ( ! sock)
{
writeln( "error connecting" ) ;
return ;
}
sendFully( sock, buildHttpRequest( HOST, PATH) ) ;
write( cast ( char [ ] ) ( receiveFully( sock) ) ) ;
}
catch ( SocketException e)
writeln( e) ;
}
aW1wb3J0IHN0ZC5zdGRpbzsKaW1wb3J0IHN0ZC5zb2NrZXQ7CmltcG9ydCBjb3JlLm1lbW9yeTsKClNvY2tldCB0Y3BDb25uZWN0KEFkZHJlc3NbXSBhZGRyZXNzZXMpCnsKCWF1dG8gc29jayA9IG5ldyBUY3BTb2NrZXQoQWRkcmVzc0ZhbWlseS5JTkVUKTsKCQoJZm9yZWFjaChhZGRyOyBhZGRyZXNzZXMpCgl7CgkJdHJ5CgkJewoJCQlzb2NrLmNvbm5lY3QoYWRkcik7CgkJCWJyZWFrOwoJCX0KCQkKCQljYXRjaChTb2NrZXRFeGNlcHRpb24gZSkKCQl7fQoJfQoJCglyZXR1cm4gc29jay5pc0FsaXZlID8gc29jayA6IG51bGw7Cn0KCnN0cmluZyBidWlsZEh0dHBSZXF1ZXN0KHN0cmluZyBob3N0LCBzdHJpbmcgcGF0aCkKewoJcmV0dXJuICJHRVQgIiB+IHBhdGggfiAiXHJcbiIKCSAgICAgICAiSG9zdDogIiB+IGhvc3QgfiAiXHJcbiIKCSAgICAgICAiQ29ubmVjdGlvbjogY2xvc2VcclxuIgoJICAgICAgICJIVFRQLzEuMVxyXG4iCgkgICAgICAgIlxyXG4iOwp9Cgp2b2lkIHNlbmRGdWxseShTb2NrZXQgc29jaywgY29uc3Qodm9pZClbXSBkYXRhKQp7CglwdHJkaWZmX3Qgc2VudDsKCWRvIGRhdGEgPSBkYXRhWyhzZW50ID0gc29jay5zZW5kKGRhdGEpKSAuLiAkXTsKCXdoaWxlKHNlbnQgPiAwKTsKfQoKdm9pZFtdIHJlY2VpdmVGdWxseShTb2NrZXQgc29jaykKewoJYXV0byByZXN1bHQgPSBuZXcgY2hhclswXTsKCWF1dG8gYnVmID0gbmV3IGNoYXJbMTAyNF07CglwdHJkaWZmX3QgcmVjdmQ7CgkKCWRvIHJlc3VsdCB+PSBidWZbMCAuLiAocmVjdmQgPSBzb2NrLnJlY2VpdmUoYnVmKSldOwoJd2hpbGUocmVjdmQgPiAwKTsKCQoJcmV0dXJuIHJlc3VsdDsKfQoKZW51bSBIT1NUID0gInd3dy5jLXBsdXNwbHVzLmRlIjsKZW51bSBQQVRIID0gIi9mb3J1bSI7CmVudW0gUE9SVCA9IDgwOwoKdm9pZCBtYWluKCkKewoJdHJ5Cgl7CgkJYXV0byBzb2NrID0gdGNwQ29ubmVjdChnZXRBZGRyZXNzKEhPU1QsIFBPUlQpKTsKCQkKCQlpZighc29jaykKCQl7CgkJCXdyaXRlbG4oImVycm9yIGNvbm5lY3RpbmciKTsKCQkJcmV0dXJuOwoJCX0KCQkKCQlzZW5kRnVsbHkoc29jaywgYnVpbGRIdHRwUmVxdWVzdChIT1NULCBQQVRIKSk7CgkJd3JpdGUoY2FzdChjaGFyW10pKHJlY2VpdmVGdWxseShzb2NrKSkpOwoJfQoJCgljYXRjaChTb2NrZXRFeGNlcHRpb24gZSkKCQl3cml0ZWxuKGUpOwp9
compilation info
prog.d(60): Error: undefined identifier getAddress
prog.d(60): Error: function expected before (), not getAddress of type int
prog.d(60): Error: function prog.tcpConnect (Address[] addresses) is not callable using argument types (int)
Error: cannot implicitly convert expression (__error) of type int to Address[]
Error: cannot cast int to Address[]
stdout